ACM_POJ
lwfcgz
北大小硕,各种渣。。。
展开
-
【递归 & 动态规划】POJ 1191 棋盘分割
大一的时候接触这道题目,当时死活不会做。。。最近突然又想起了这个伤疤,就把这道题给秒杀掉了,想想当年的我真是笨到家了T_T首先对表达式进行变形,不考虑常量,最终其实就是求分成n块,使得每块的分值平方和最小。基本思想很简单了,用dp[r1][c1][r2][c2][n]表示r1行到r2行、c1列到c2列的矩形区域切n刀得到的最小平方和,n=0时是一个边界条件,对于n>0的情形原创 2015-03-25 14:45:26 · 973 阅读 · 0 评论 -
【线段树】poj 2528 Mayor's posters
需进行离散化,从后往前进行覆盖扫描。#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include原创 2013-03-22 19:33:15 · 599 阅读 · 0 评论 -
【线段树】 POJ 3264 Balanced Lineup
这题可以用RMQ去做,正如我上一篇博客所示……也可以用线段树去做,线段树的应用范围更普遍一些,我有把这题重新写了一遍。#include #include #include #include #include #include #include #include #include #include #include #include #include #includ原创 2013-03-21 22:45:37 · 605 阅读 · 0 评论 -
【RMQ】poj 3264 Balanced Lineup
首先是预处理,用一个DP解决。设a是要求区间最值的数列,f[i,j]表示从第i个数起连续2^j个数中的最大值。例如数列3 2 4 5 6 8 1 2 9 7 ,f[1,0]表示第1个数起,长度为2^0=1的最大值,其实就是3这个数。f[1,2]=5,f[1,3]=8,f[2,0]=2,f[2,1]=4……从这里可以看出f[i,0]其实就等于a[i]。这样,DP的状态、初值都已经有了,剩下的就是状态原创 2013-03-19 21:51:52 · 673 阅读 · 0 评论 -
【动态规划】poj 3211 washing clothes
首先应该注意到,各种颜色之间是互相没有干扰的,因此可以分别计算每种颜色所花的时间,然后再累加求和。第二点,计算一种颜色衣服所花的时间,由于所花费时间的总和不变,所以实质上就是把一堆数分成两组,并且这两组的和要尽量接近,其中小者一定不会超过总和的一半,可以用动态规划来实现。明白以上两点就很简单了。#include #include #include #include #inclu原创 2013-03-10 03:18:17 · 843 阅读 · 0 评论 -
【数学水题】poj 1306 Combinations
Java处理大数还是很方便的,无压力AC。import java.math.BigInteger;import java.util.Scanner;public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method原创 2012-08-31 21:18:41 · 967 阅读 · 0 评论 -
【计算几何】poj 1654 Area
计算凸包面积,非常基础的一道计算几何题目,精度问题上比较烦人,需要转换成long long来输出最终结果。#include#include#includeusing namespace std;const int dir_x[]={0,-1,0,1,-1,0,1,-1,0,1};const int dir_y[]={0,-1,-1,-1,0,0,0,1,1,1};struct P原创 2012-08-16 20:59:06 · 523 阅读 · 0 评论 -
poj测试数据
有一些链接貌似不工作了,不过大部分应该还是可以的,需要的时候可以看看吧。1、USACO2006年November题目和测试数据的网址http://ace.delos.com/NOV062007年open赛题目和测试数据的网址http://ace.delos.com/OPEN07以此类推2、日本ACM比赛http://www.acm-japan.org/h转载 2012-08-16 11:15:14 · 3547 阅读 · 0 评论 -
【动态规划】poj 3934 Queue
关键在于找出递推关系式,i个人组成m对可以认为是先排列最高的i-1个人,然后再安排最矮的那个同学。于是,i个人组成m对有两种情况:(i-1)个人先组成(m-2)对,然后最矮的人插在彼此的间隙中,此时不会对原来的对数造成任何影响(因为这是最矮的)另一种情况是,(i-1)个人先组成(m-1)对,然后最矮的人照在两侧,此时也不会对原来的对数产生任何影响,而且只增加了一对。#includeu原创 2012-08-17 10:36:47 · 986 阅读 · 0 评论 -
【计算几何】poj1031 fence
简直吐血啊。。。。本来就是求个角度,自作聪明的用点积和叉积来求,后来发现都错掉了。。。。#include#include#include#includeusing namespace std;const double PI=3.1415926535;struct Point{ double x,y;};Point point[205];double beta(int k)原创 2012-08-16 17:30:46 · 1189 阅读 · 0 评论 -
【计算几何】poj1113 Wall
进行凸包扫描并求面积即可。#include#include#include#includeusing namespace std;struct Point{ int x,y;};int cmp(const void*elem1 ,const void*elem2);void add(Point a,int k);double dbl(Point a,Point b,Poi原创 2012-08-16 13:20:13 · 652 阅读 · 0 评论 -
【贪心+排序】poj 2376 Cleaning Shifts
先按照开始时间升序排序,再按照结束时间升序排序,每次都挑选结束时间最晚的区间,直到把整个区间覆盖。边界情况比较多,而且还有一个很违背常识的地方,上一头牛t时刻结束,下一头牛可以从t+1时刻开始,而不是t时刻。。。#include #include #include #include using namespace std;int main(){ int n, t; pair i原创 2013-06-03 22:57:19 · 1036 阅读 · 0 评论 -
【stl set】冷血格斗场 && 热血格斗场
冷血格斗场:set > record;void solve(int power, int id){ set >::iterator ptr, left, right; ptr = record.find(make_pair(power, id)); right = record.end(); right--; if(ptr == record.begin()){ right =原创 2013-07-16 20:30:48 · 4911 阅读 · 1 评论 -
【二分+广搜】poj 2485 Highways
二分无鸭梨#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #in原创 2013-07-16 21:31:43 · 825 阅读 · 0 评论 -
poj 1182食物链
并查集的典型应用,搞明白各节点间的指向关系是关键。其实还是蛮简单的,废话不多说,直接贴源码。#include#include#define MAX 50001using namespace std;int find(int x);void Initial(int n);struct Node{ int pre,rank;};Node node[MAX];int main()原创 2011-12-08 19:11:53 · 539 阅读 · 0 评论 -
【线段树 + 扫描线】poj 1177 pictures 矩形周长并
和矩形面积并的思路类似,只是累加周长时需要同时考虑shu原创 2014-11-06 11:17:32 · 787 阅读 · 0 评论 -
【线段树 + 离散化 + 扫描线】poj 1151 Atlantis 矩形面积并
将所有的线段按照x左边从小到大排序,并对所有的横纵坐标jinxing原创 2014-11-06 11:14:42 · 571 阅读 · 0 评论 -
【计算几何】 POJ 1556 The Doors
和图论中的最短路密切相关的yidao原创 2014-11-21 21:06:52 · 632 阅读 · 0 评论 -
查分约束系统详解
一直不知道差分约束是什么类型题目,最近在写最短路问题就顺带看了下,原来就是给出一些形如x-y好神奇的是这类问题竟然可以转换成图论里的最短路径问题,下面开始详细介绍下比如给出三个不等式,b-a由题我们可以得知,这个有向图中,由题b-a根据以上的解法,我们可能会猜到求解过程实际就是求从a到c的最短路径,没错的....简单的说就是从a到c沿着某条路径后把所有权值和转载 2014-10-31 23:50:27 · 652 阅读 · 0 评论 -
PKU Round 3解题报告
比赛地址在http://poj.openjudge.cn/challenge3/A. table要想满足尽可能多的小组要求,肯定是按照小组中人数的升序来逐个满足。周长满足的策略可以采用贪心法,注意到每增加一个正方形周长加2;每增加一个等边三角形周长增加1;因此三角形的灵活性相对更大,应当优先用正方形(在同等情况下)。int main(){ int a, b, n;原创 2013-11-12 10:03:56 · 720 阅读 · 0 评论 -
北大ACM校内赛解题报告
今天去打酱油的。。。水了四道题,给各种IOI、ACM Final的大神跪。。。原创 2014-05-10 18:53:46 · 2948 阅读 · 1 评论 -
POJ 1185 炮兵阵地
典型的状态压缩动态规划,用位来表示各个状态可以显著加快运算速度、节省存储空间。对于一个位置,如果它部署了一支部队,那么会对它的前后左右的2格位置产生影响,如果以行作为状态,则不能单单由上一状态转移,那样的话不能保证在它的2格处不发生矛盾,而在这个题目中,以行做状态又很明显,所以在状态的转移时必须是上一行的状态和上上行的状态一起转移,如果用f[i,j,k]来表示在第i行时,取第j个状态(注意是第原创 2014-01-18 22:34:42 · 698 阅读 · 0 评论 -
POJ 2411 Mondriaan's Dream
基本思想是基于状态压缩的动态规划。按照每一行顺序放置,由于方块的形状限制,每一行的放置情形只跟上一行有关,而跟这之前的无关,这就为采用动态规划算法提供了依据。可分三种情况来单独讨论:①当前位置不放置方块。则上一行的相应位置必须填充方块,否则以后都不可能填充。②当前位置竖放方块。上一行相应位置必须为空,否则就会产生方块的重叠。③当前位置横放方块。上一行相应位置必须填充方块第一原创 2014-01-18 18:14:11 · 593 阅读 · 0 评论 -
【博弈】poj 2960 S-Nim
虽然题目有一点变形,不过本质还是用SG函数,nim(n)=mex{nim(n-s[i])},想清楚这一点,问题就比较容易解决了。#includeusing namespace std;int main(){ int t,m,number,goal[10005],s[105],tmp,mark[10005]; while(cin>>t&&t){ for(int i=0;i<t;i++原创 2012-08-23 10:24:10 · 1188 阅读 · 0 评论 -
【计算几何】poj1066 Treasure Hunt
我还没搞明白为什么注释掉if(minimum==n+1)那一句就WA了……好无奈……博文发表一小时之后补上:我想明白了。。。。原来存在n=0的数据。。。。。。。#include#includeusing namespace std;struct TPoint{ double x,y;};struct TWall{ TPoint p[2];};TWall wall[5原创 2012-08-16 10:54:03 · 902 阅读 · 0 评论 -
【水题】poj1970 The Game
五子棋盘胜负,简直弱爆了。#includeusing namespace std;const int dir_x[]={1,0,1,-1};const int dir_y[]={0,1,1,1};void search(int x,int y);int judge,goal_x,goal_y,board[21][21];int main(){ int t; cin>>t; w原创 2012-06-29 23:10:38 · 1115 阅读 · 0 评论 -
【搜索】poj1011sticks
狂剪枝。。。。#include#includeusing namespace std;const int MAX=999999;bool cmp(int a,int b){ return a>b; }void dfs(int StickNumber,int left,int preLength);int n,sum,goal,len[101];int counter;boo原创 2012-04-26 22:23:34 · 465 阅读 · 0 评论 -
【博弈】poj1704 Georgia and Bob
核心思想在于想熟知的Nim游戏进行转化,可以把空格数作为石子数,每一步既可以从任一堆石子中取若干,也可以将最右侧的石子扔掉。而且经分析可知,偶数位置的石子实际上不发挥任何作用。具体的细节懒得写了....果断上代码。时间:32ms#include#includeusing namespace std;int main(){ int t,n,sum,position[10005];原创 2012-04-13 22:32:40 · 723 阅读 · 0 评论 -
【博弈&动态规划】poj2068Nim
记忆化的搜索,在数据规模较小的情况下比较好用。这道博弈的题目完全可以借助于动态规划求解,形式上是递归,实质上借助于一个数组避免了重复的计算。代码如下:#includeusing namespace std;int search(int count,int leftNumber);int n,maxNumber[50];int dp[25][10001];int main(){原创 2012-04-08 18:36:07 · 984 阅读 · 0 评论 -
【博弈】威佐夫博弈poj1067 取石子游戏
最后居然能跟黄金分割搭上关系,这也太神奇了.....有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。这种规则下游戏是颇为复杂的。我们用(a[k],b[k])(a[k] ≤ b[k] ,k=0,1,2,...,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为转载 2012-04-06 16:39:37 · 651 阅读 · 0 评论 -
【递归】poj 2083fractal
这题实在是相当水,不过很好体现了递归算法的思想,只要搞明白坐标之间的关系以及边界情况,求解还是挺容易的。、#include#includeusing namespace std;char fractal[750][750];void dfs(int n,int x,int y){ if(n==1){ fractal[x][y]='X'; return; } int num原创 2012-03-30 16:25:27 · 985 阅读 · 0 评论 -
【字典树】poj1451 T9
第一次做字典树的题目,吐血啊简直。。。。。。最后调试了一个多小时,最终AC了,代码丑陋不堪,惭愧,实在惭愧。。。。#include#include#include#includeusing namespace std;//字典树的每个节点中存储权重和指针两部分 struct node{ node* ptr[26]; int weight[26];};node root;原创 2012-02-12 20:49:45 · 1212 阅读 · 0 评论 -
【Joseph问题】poj1012 Joseph
话说之前一直就没搞懂这题是怎么做的。。。模拟又总是超时,实在想不出其他的好办法。。。后来发现度娘确实挺强大的,学习下别人的吧。转载自http://www.cnblogs.com/newpanderking/archive/2011/07/26/2117751.html无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当转载 2012-02-11 13:37:25 · 724 阅读 · 0 评论 -
【动态规划】poj1458 common subsequence
一道相当经典的动态规划题目,由于以前做过的,所以还算顺手。状态转移方程几乎可以在任何一本将动态规划的书中找到#include#includeusing namespace std;int main(){ char str1[2000],str2[2000]; int common[500][500]; int len1,len2; while(cin>>str1>>st原创 2012-02-08 19:55:38 · 578 阅读 · 0 评论 -
【树形动态规划】poj1463 strategic game
说白了,和一般的动态规划也没啥区别,只不过是状态的转移跑到了树的子父节点之间。这道题目应该还算是简单的,由于是第一次做,还是花费了很大的时间啊……主要就是邻接表表示图(发现vector真的很好用,不用自己去写链表嗷嗷嗷~),以及深度搜索,在回溯是为了避免重复计算,用数组记录下了中间的计算结果,这也应该是最体现动态规划的一个地方吧。输入输出用的比较混乱,还请大家轻拍~#include原创 2012-02-09 11:08:03 · 911 阅读 · 0 评论 -
【贪心】poj2336 ferry loading II
发现自己简直弱爆了,这题都想了好长时间........总次数可通过上次运送的次数加1得到,总时间需做一个简单判断。核心是贪心的运送策略:先运送m%n辆车,然后每次都运送n辆汽车,从而得到最优解。#includeusing namespace std;int max(int a,int b){ if(a>b) return a; return b;}int main(){原创 2012-02-08 19:23:48 · 1050 阅读 · 0 评论 -
【网络流】poj 1273 Drainage Ditches
第一次写网络流的算法,巨水的题目......利用残留网络不断的寻找增广路径就行了。#include#includeusing namespace std;bool augment(); //capacity of pipeint capacity[205][205];//previous pipeint record[1005];int n;bool checked[20原创 2012-04-20 13:48:36 · 431 阅读 · 0 评论 -
【矩阵快速幂】poj3233 Matrix Power Series
算是比较简单的一道题目,可以练一下矩阵快速幂的的基本算法。废话不多说,直接上代码。#includeusing namespace std;struct MATRIX{ int matrix[31][31];};MATRIX matrix_mul(MATRIX a,MATRIX b);MATRIX matrix_add(MATRIX a,MATRIX b);M原创 2012-05-07 13:51:27 · 680 阅读 · 0 评论 -
【贪心】poj3636 nested dolls
好水啊好水啊。。。不过输入输出有点恶心,cout和cin就超时,scanf和printf就AC了。。。#include#include#include#includeusing namespace std;struct Node{ int w,h;};int cmp(const void* elem1,const void*elem2){ Node *p,*q; p=原创 2012-05-27 22:50:14 · 735 阅读 · 0 评论 -
【动态规划】poj2773采药问题
http://poj.grids.cn/practice/2773/动态规划的入门题目,一年之前还非常抓狂,现在随手写写就AC了。。。。看来刷题还是很有用的。。。#include#include#includeusing namespace std;int main(){ int totalTime,number,value[101],time[101],maxValue[1原创 2012-05-24 22:02:08 · 2724 阅读 · 4 评论