dp
文章平均质量分 60
haha_2678
Do the impossible!!!
展开
-
Poj 1157 题解
一开始看错了题意。记得个前面留够位置和后面留够位置就好了。还有f别忘了清空为-99999Code:#include#include#include#includeusing namespace std;int f[110][110];int a[110][110]; int n,m;void Input(){ scanf("%d%d",&n,&m); for原创 2015-01-07 13:55:25 · 384 阅读 · 0 评论 -
Poj 1088 题解
水题dp,其实就是记忆化搜索#include#include#include#includeusing namespace std;int f[110][110];int a[110][110],n,m;void Input(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) s原创 2015-01-01 00:56:19 · 294 阅读 · 0 评论 -
Poj 1036 题解
一道dp题。一开始看起来蒙了,但是其实很简单。他的门是可以不动的。也就是说你这个小偷到上一个小偷的这段时间如果大于两者fat的差的话绝对值就必定满足。之后就是dp了你每一个小偷都继承这上一个来枚举即可,f[i]表示第i个小偷能偷到的荣誉。其实就是继承的时候判断一下继承的上一个是否合法即可Code:#include#include#include#include原创 2014-12-30 13:50:26 · 420 阅读 · 0 评论 -
bzoj 1087 题解
状态压缩的dpCode:/************************************************************** Problem: 1087 User: wohenshuai Language: C++ Result: Accepted Time:120 ms Memory:19344 kb******原创 2015-02-05 15:44:58 · 393 阅读 · 0 评论 -
Poj 1018 题解
这是一道简单的dp题。首先想想,b/p最大,就是想让b最大,p最小。状态定义f[i][j]=前i行最小最小值为j的最小价值p,这样用b/p才最大,最后一个个枚举。(自然保证最大)为什么一个个枚举可以呢 其实联系一下p想想就好了。对了,还有的就是用c++ 提交Code:#include#include#includeusing nam原创 2014-12-29 13:57:27 · 472 阅读 · 0 评论 -
Poj 1014 题解
第一次发poj,原百度空间已经放弃了。还是贴个网址吧,容易找一点。http://hi.baidu.com/scqmysgfqrajrtr一道多重背包的题。一开始直接背包Code:#include#include#include#includeusing namespace std;int a[7];int t=0;bool v[21000];void原创 2014-12-28 15:49:55 · 370 阅读 · 0 评论 -
bzoj 1045 题解
简单dp首先,最终每个小朋友的糖果数量可以计算出来,等于糖果总数除以n,用ave表示。假设标号为i的小朋友开始有Ai颗糖果,Xi表示第i个小朋友给了第i-1个小朋友Xi颗糖果,如果Xi对于第一个小朋友,他给了第n个小朋友X1颗糖果,还剩A1-X1颗糖果;但因为第2个小朋友给了他X2颗糖果,所以最后还剩A1-X1+X2颗糖果。根据题意,最后的糖果数量等于ave,即得到了一原创 2015-02-04 16:17:31 · 485 阅读 · 0 评论 -
bzoj 1079 题解
迭代加深搜索,加点dp的味道状态定义有点神奇 dp[a][b][c][d][e][l]表示还剩a个1,b个2,c个3,d个4,e个5,最后一个属于什么分类来分那么的话就从b变成a就是(b-1),(a+1) 然后用组合数学相乘即可。今天感谢ouyangwenbinCode:/*********************************************原创 2015-02-04 16:37:56 · 433 阅读 · 0 评论 -
bzoj 1088 题解
确定第一第二个剩下的往下推Code:/************************************************************** Problem: 1088 User: wohenshuai Language: C++ Result: Accepted Time:20 ms Memory:1360 kb**原创 2015-02-04 16:31:39 · 350 阅读 · 0 评论 -
bzoj 1047 题解
单调序列优化dp单调队列求最大最小值……首先,我们用一个单调队列维护行最小值如果发现队首的元素“过期”了,那么就把它丢掉如果队尾元素的值小于(大于)当前的值,那么就把它丢掉例如:模拟操作:1234567891011原创 2015-02-04 16:27:04 · 352 阅读 · 0 评论 -
Poj 1273 题解
模板题,dinic网络流,直接上代码。Just prepare for the exam。记得数组开大,多组数据。Code:#include#include#include#includeusing namespace std;struct node{ int x,y,c,next,other;}a[6110000]; int len,first[1110000]原创 2015-01-10 13:56:16 · 311 阅读 · 0 评论 -
bzoj 1003 题解
spfa+dp这道题题目有点别扭,不是很懂。最后问oywb才懂。其实是每一天都走一辆船,但后一天和前一天走的不同,那就要加上k的费用。思路:1.先用一个mindis[i][j]表示第i天走到第j天怎样走才是最优的。 (单一种方案来走)2.之后用一个f数组存最优解f[i]=min(f[i],f[j-1]+mindis[i][j]*(i-j+1)+k)单一方案走原创 2015-02-02 10:32:25 · 423 阅读 · 0 评论 -
Poj 1579 题解
记忆性搜索,注意判断数组的边界#include#include#include#includeusing namespace std;int f[30][30][30],a,b,c;int ans;int dfs(int x,int y,int z){ if(x<=0||y<=0||z<=0) return f[0][0][0]=1; else if(x>20||y>2原创 2015-01-09 13:42:53 · 283 阅读 · 0 评论 -
Poj 1458 题解
简单的二维一边推Code:#include#include#include#include#includeusing namespace std;char st1[1100],st2[1100];int f[1100][1100];void Solve(){ memset(f,0,sizeof(f)); for(int i=1;i<=strlen(st1+1);i原创 2015-01-09 13:22:31 · 295 阅读 · 0 评论 -
Poj 1163 题解
打完后编译都没编译直接acv.Code:#include#include#include#includeusing namespace std;int a[1100][1100],n;int f[1100][1100];void Input(){ scanf("%d",&n); for(int i=1;i<=n;i++) { for(int j=1;j<原创 2015-01-08 12:53:53 · 354 阅读 · 0 评论 -
Poj 1170 题解
本来想用5个数表达一个状态的。但是先起来麻烦。结果用5维数组做咯。离散化了。 还是一次acCode:#include#include#include#include#includeusing namespace std;struct node{ int p[6]; int val;}a[1100]; int ls=0,len=0;mapmp; int原创 2015-01-08 13:42:57 · 357 阅读 · 0 评论 -
Poj 1050 题解
最大子矩阵和。 O(n^3)不做太多诠释了。直接上代码,不懂评论即可。今天尽量多刷点题#include#include#includeusing namespace std;int a[110][110],n;int f[110][110];void Input(){ scanf("%d",&n); for(int i=1;i<=n;i++) for(in原创 2014-12-31 13:42:20 · 604 阅读 · 0 评论