POJ
文章平均质量分 56
huangshenno1
这个作者很懒,什么都没留下…
展开
-
POJ1946 Cow Cycling
dp题,用dp[i][j][k]表示 剩下i头牛 头牛的体力为j 已经跑了k圈 所用的最短时间 尽量把头牛的体力用完后dropout再换牛,否则会多消耗总体力;头牛没有体力之后就可以直接dropout换牛,接上来的牛的体力等于e-k #include int Min(int a,int b){return a<b?a:b;} const int INF = 0x3f3f3f3f; i原创 2013-03-11 12:13:39 · 810 阅读 · 0 评论 -
POJ2528 Mayor's posters
区间线段树水题,离散化怒A= = 我觉得最后算答案哪里应该不用再单独算的= = #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #i原创 2013-09-26 15:30:53 · 499 阅读 · 0 评论 -
POJ3468 A Simple Problem with Integers
我不是code的生产者,我只是code的搬运工。(咱们码农有力量!) 全当学写lazy标记了= = PS:说到这个lazy标记,从线段树开始我就不会lazy标记啊,直接导致我一年来再也不写线段树了= =(还好我有两个线段树达人队友,妈妈再也不用担心我的线段树了~) #include #include #include #include #include #inclu原创 2013-08-29 23:06:46 · 527 阅读 · 0 评论 -
POJ3243 Clever Y
对于任意正整数x,z,p,求满足x ^ y = z (mod p) 的最小的y 对Babystep_Giantstep算法的扩展 详细证明请参考http://blog.csdn.net/tsaid/article/details/7354716 #include #include #include using namespace std; typedef long long l原创 2013-07-26 14:57:48 · 530 阅读 · 0 评论 -
POJ1185 炮兵阵地
这道题用DP做有两种解法,一是三进制表示,我认为这种应该是比较理想的,但是比较难写。 另一种就是二进制,不过需要注意的是,每一行的状态最多只有60种,所以60*60*60*100加上一些剪枝勉强可以过= = 用dp[i][j][k]表示第i行,上一行的状态是j,这一行的状态是k。则转移到下一行时有,dp[i+1][k][l]=max(dp[i+1][k][l], dp[i][j][k]+pop原创 2013-07-20 18:58:21 · 497 阅读 · 0 评论 -
POJ2411 Mondriaan's Dream
用1*2的小长方形铺满整个n*m的大长方形吧!问有多少种方案。 用dp[i][j]表示第i行(从1开始计数)之前的所有行均已铺满,第i行目前铺的形状是j(j的二进制表示,比如01011001)。 填满第i行有三种方法,用横的小长方形和用竖的小长方形,或者兼用之。 枚举所有可以填横的小长方形的方法,设此时改行形状为xx,若某一位置不够(为0),则可用竖的小长方形填补,形成的新一行的形状为((1原创 2013-07-20 14:51:06 · 495 阅读 · 0 评论 -
POJ3590 The shuffle Problem
http://poj.org/problem?id=3590 题目的意思就是求最大的置换周期。很容易知道,整个序列的置换周期等于其中所有小循环的阶的最小公倍数,DP求之。 #include #include const int maxn = 110; int T,n; int dp[maxn][maxn],ds[maxn][maxn],ans[maxn],anss[max原创 2013-07-17 14:04:29 · 572 阅读 · 0 评论 -
POJ3274 Gold Balanced Lineup
挺值得一做的数据结构题。 个人总感觉能用map做,但是一直wa,所以来用hash了。 不得不说,虽然大家对hash都很熟,但是hash还真挺难写= =(是我蒟蒻了么= =) #include #include #include #include #include #include #include #include #include #include #inclu原创 2013-05-08 12:57:07 · 519 阅读 · 0 评论 -
POJ题目分类推荐
转贴 ACM的算法(觉得很好,有层次感) OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2转载 2013-04-03 21:21:22 · 803 阅读 · 0 评论 -
POJ2761 Feed the dogs
X姐推荐做的一道喂狗题= =,的确是挺有想法的一道题。 其实就是treap模板题,注意两个地方,一是数据有重复(WA无数次出的结论),二是必须离线处理查询。 (据说用树状数组和线段树也能A) 第一次理解到原来离线处理作用这么大,具体来说就是对所有查询根据起点和终点排序,由于题目保证了所有查询不相互包含,所以从左向右,每次删除多余的,添加进新来的,然后执行查询操作,保存答案。 Tre原创 2013-05-08 09:48:58 · 915 阅读 · 2 评论 -
POJ2983 Is the Information Reliable?
经典的差分约束问题,对于每一条语句: P A B X ==> dis[B]-dis[A]==X ==> dis[B]-dis[A]>=X && dis[A]-dis[B]>=X V A B ==> dis[B]-dis[A]>=1 然后相应的连边即可,最后用spfa判断负环,若无负环,则输出Reliable,反之Unreliable 注意:spfa中的松弛操作应作相应修改,还有原创 2013-04-16 11:36:41 · 530 阅读 · 0 评论 -
POJ1094 Sorting It All Out
拓扑排序题,每加入一条边,判断 (1)形成有向环,退出 (2)形成唯一拓扑顺序,退出 (3)加入所有边后,仍无法确定唯一拓扑顺序 注意判断的优先级!!! #include #include #include using namespace std; int n,m,nn,ans,flag; int g[30][30],d[30]; bool vis[30],qt;原创 2013-04-15 12:04:00 · 489 阅读 · 0 评论 -
POJ3124 The Bookcase
这是一道比较难想到的DP问题, 先按高度从大到小排序,不妨设第一本书是放在第一层,且它在第一层是最高的,下面讨论其他的书。 dp[i][j]表示第2层书架厚度为i,第3层书架厚度为j时二三两层的高度和。 则有状态转移方程: if (j==book[i].t && dp[j][k]>dp[0][k]+book[i].h) dp[j][k]=dp[0][k]+book[i].h; i原创 2013-04-11 21:39:51 · 481 阅读 · 0 评论 -
POJ3512 Incidental Points
题意是给你些笛卡尔坐标系上的格点,求最多有多少个点在一条直线上。 这题的输入很麻烦,推荐用gets后再sscanf输入, 这题还卡时间!!!只有O(n^2*logn)以下的算法能过,而且之前我用stl写也超时了, 所以这里我直接用数组排序模拟,勉强过了,真是恶心的题啊= = #include #include using namespace std; const double原创 2013-04-10 13:16:16 · 585 阅读 · 1 评论 -
POJ2635 The Embarrassed Cryptographer
一道高精度取模的简单题,有几个要注意的地方: 1.不要用10进制存数,会TLE 2.如果用10000进制或以上的存数,注意用long long,否则因为除数 我用的1000进制,代码如下。 #include #include int l,n,r,st,lim; int num[105]; char str[105]; int prime[80000],cnt; bool原创 2013-04-03 13:17:33 · 457 阅读 · 0 评论 -
POJ2226 Muddy Fields
这是个最大匹配的经典题,个人推荐做一做,对建模的理解会更深刻。 总的来说,就是以每个横向的连续污点构成一个X点,以每个纵向的连续污点构成一个Y点,若横向与纵向同时覆盖了一个点,则连接XY。 构图完毕,然后用匈牙利算法。 #include #include const int maxr = 60; const int maxn = 1000; int un,vn,r,c; char原创 2013-03-14 11:39:22 · 449 阅读 · 0 评论 -
POJ1952 BUY LOW, BUY LOWER
题意很简单,就是求最长降序子序列的长度和其个数且不能重复。 用dp[i]表示以第i个数为尾的最长子序列的长度,t[i]表示第i个数为尾的最长子序列的个数,特别的,当a[i]与a[j](i>j)相同且之前的序列也重复时(具体就是此时dp[i]==1),强制令t[i]=0,可用数学归纳法证明。 不想多说了,代码见下。 #include int n,len,cnt,a[5005]; i原创 2013-03-13 12:09:32 · 493 阅读 · 0 评论 -
POJ1743 Musical Theme
后缀数组典型题。 给定一个字符串,求最长重复子串,这两个子串不能重叠。 计算height数组,然后二分答案k,连续的height >= k的区间中sa相差最大的差若超过k,则符合条件。 #include #include #include using namespace std; const int maxn = 20005; int a[maxn], s[max原创 2013-10-23 00:29:15 · 502 阅读 · 0 评论