上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 25 下一页
摘要: 题目链接:http://poj.org/problem?id=2684 属于比较水的计算几何题目,直接叉积判断即可。 1 //STATUS:C++_AC_0MS_192KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<algorithm> 9 #include<vector>10 # 阅读全文
posted @ 2013-03-13 22:16 zhsl 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2155 比较典型的二维线段树题目,直接永久更新即可,在询问的时候,要询问每个x区间的子树,复杂度O(log(n)^2)。 也可以用树状数组搞,推荐看NOI 2009武森《浅谈信息学竞赛中的“0”和“1”》。 1 //STATUS:C++_AC_907MS_16144KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 //#include<math.h> 6 #include<iostream> 阅读全文
posted @ 2013-03-13 22:14 zhsl 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2754 当时居然没有想到是多重背包,敲了个分组背包,TLE。。。 后来才知道可以转化为多重背包,即把每个下界L[i]放为0,上限为U[i]-L[i],就是物品的个数,价值为P[i],花费为M[i]。本来题目要求Σ(M[i]*Table[i])=0时,Σ(P[i]*Table[i])的最大值。现在Table[i]的每个值都加了-L[i],即Σ(M[i]*Table[i] + M[i]*L[i]) 时,Σ(P[i]*Table[i] + P[i]*L[i])的最值,由Σ(M[i]*Table[i])=0可知,背包的容量为Σ(M... 阅读全文
posted @ 2013-03-13 22:10 zhsl 阅读(290) 评论(0) 推荐(0) 编辑
摘要: Codeforces Round #171 (Div. 2) 搞完(题解) Codeforces Round #168 (Div. 2) 差E ( 题解 ) 阅读全文
posted @ 2013-03-11 21:36 zhsl 阅读(329) 评论(0) 推荐(0) 编辑
摘要: A.yy题,分情况讨论比较方便,详见代码。View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<math.h> 5 #include<iostream> 6 #include<string> 7 #include<algorithm> 8 #include<vector> 9 #include<queue>10 #include<stack>11 using nam 阅读全文
posted @ 2013-03-11 21:31 zhsl 阅读(521) 评论(0) 推荐(0) 编辑
摘要: A.模拟。 B.数据小,模拟。 C.给定一个数组,要求使得数组中不存在两个数相差k倍,问数组中最大的数的个数。先排序,然后从前往后找倍数相差为k的数,二分查找。View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<math.h> 5 #include<algorithm> 6 #include<string> 7 #include<queue> 8 #include<stack> 9 #i 阅读全文
posted @ 2013-03-11 21:09 zhsl 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2353 状态方程:f[i][j]= Max{ Max{ sum[j]-sum[k-1]+f[i-1][k] | k<=j } , Max{ sum[k]-sum[j-1]+f[i-1][k] | k>j } }。复杂度O(n*m^2),如果不优化的话会TLE。分离状态转移方程: 1,k<=j 时,f[i-1][k]-sum[k-1]; 2,k>j 时,f[i-1][k]+sum[k]; 即把与j相关的分离出来,那么维护一个前缀最小和后缀最小就可以了,并且记录位置。 1 //STATUS:C++_AC_172 阅读全文
posted @ 2013-03-08 22:19 zhsl 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3034 此题的状态方程很容易想出来,以时间为阶段划分,然后地图为状态,f[k][i][j]=Max{ f[k-1][x][y]+t | t=sum( map[k][p][q] && (p,q)在线段(i,j)-(x,y)上 }。 转移的时候用点小技巧就可以了,就是先把通方向上的单位整数向量求出来,在更新的时候逐个用 n*单位整数向量 (n满足距离不超过d) 来更新f[k][i][j],最后遍历一遍最值。 此题有一个很坑的trick:hammer可以在正整数坐标轴的外面,很坑啊有不有!!!足足贡献了4个WA= = 1 阅读全文
posted @ 2013-03-08 00:53 zhsl 阅读(468) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3612 状态转移方程容易想出:f[i][j]=min{ f[i-1][j]+c*(j-k)+(j-h[i])^2 | h[i-1]<=k<=maxh && h[i]<=j<=maxh },k为上一个pole的可能高度,maxh为所有poles的最高高度。 可以算出上面的转移方程复杂度是O(n*100*100),铁定超时。仔细想下还是可以优化的。我们其中(j-h[i])^2与上一个状态无关,可以忽略。只剩下f[i-1][j]+c*(j-k)了,其f[i-1][j]是常数,而c*(j-k)是变量 阅读全文
posted @ 2013-03-07 18:54 zhsl 阅读(498) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1947 题目要求,在一颗树上,求一个点数为n的联通分支最少需要截断的边的个数。 容易想到状态转移方程f[u][j]=Min{ f[v][k]+f[u][j-k] | 1 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 using namespace std;13 #define LL __int6414 #define pdi pair15 #define Max(a,b... 阅读全文
posted @ 2013-03-06 17:44 zhsl 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3590 自己暴力给水过去了,不过效率有点低。题目要求的就是给一个数n,要你求出一种方案,一些和为n的数的最小公倍数最大。题目数据量不大,容易想到用暴力的办法求出所用情况,然后比较就可以了,然后再剪下枝就可以过了。不过有更好的方法。和为n的数的最大公倍数可以用DP求出来:f[i][j]表示和为i的数划分为j个循环节时的最大公倍数,则f[i][j]=max{f[i-k][j-1] | j-1<=k<i-1};然后就是求最小的置换了。设n的最大公倍数是m,则有p1^k1*p2^k2*……*pn^kn=m,显然有p1^k1+p 阅读全文
posted @ 2013-03-04 23:26 zhsl 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1322 比较水的DP,只是精度有点坑。f[i][j]表示放置i次后,桌子上有j个chocolate的概率。显然,f[i][j]=sum{f[i-1][j-1]*(c-j+1)/c+f[i-1][j+1]*(j+1)/c};但是如果不优化,会超时,注意到f方程式随着i的增大是收敛的,所以当n很大时,只要计算前面就可以了,大概1000足够。我做的时候是比较精度fbs(f[i][j]-f[i][j-2])<esp,这样求出来c=100时,大概只要500次,但WA了,证明还是不足够收敛。显然这里还可以用滚动数组优化。 1 //STA 阅读全文
posted @ 2013-03-01 23:24 zhsl 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3254 状态压缩,用01分别表示pasture不能plant和能plant。转移方程:f[k][i]=sum{f[k-1][j] | j是能满足i的状体,不产生冲突},显然可以用滚动数组优化。 详细的转移方法(上一个的状态设为k,i为所在行数): 1,如果前一个pasture已被plant,那么下一个pasture必定不能plant,所以f[i][k&~(1<<j)]+=f[i-1][k]; 2,如果前一个pasture没有plant: a,下一个pasture不plant,那么f[i][k]+=f[... 阅读全文
posted @ 2013-03-01 13:23 zhsl 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2411 啪啦啪啦敲了80+行,1A。结果看Discuss,别人20行就解决了= =!,果然是我想复杂了。我的状态压缩效果不是很好,貌似很挫,因为状态考虑得太多了,没有类化,用了2bit的空间来表示每个格子的状态即当前放的是横向01,没放00,竖向11。而且状态转移的时候考虑的是从后面来判断前面的状态是否可行,这样的话每行就多记录了些状态(需要记录格子为空的情况)。 其实简单的做法就是从前一状态推向后一状态,用0表示当前格子放置了,1表示当前格子放置的是竖向的,而且是向下凸出的。状态转移方程:f[k][i]=sum{f[k-... 阅读全文
posted @ 2013-03-01 01:11 zhsl 阅读(1799) 评论(0) 推荐(1) 编辑
摘要: 题目链接:http://poj.org/problem?id=1320 此题可以打表水过,但这里涉及的一个知识点,那就是pell方程,形如 ax^2-by^2=1(a,b为非完全平方数)。 本题最后化简得公式:x^2-8y^2=1 pell方程的迭代解为: Xn = Xn-1 * X1 + d * Yn-1 * Y1 Yn = Xn-1 * Y1 + Yn-1 * X1//-----------------------------------------------------------------------------------------------------... 阅读全文
posted @ 2013-02-27 00:46 zhsl 阅读(364) 评论(0) 推荐(0) 编辑
上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 25 下一页