摘要: http://www.cppblog.com/MatoNo1/archive/2011/07/13/150766.html11种 (默认表达式值为1)1. x x必选 (x' ,x)2. ~x x必不选(x, x')3. x&y x和y必都选 (x',x),(y',y) 4. x&(~y) x和y' 都选 (x',x),(y,y')5. x|y x,y至少选一个(x',y),(y',x)6. x|(~y) x,y'至少选一个(x',y'),(y,x)7. ~(x&y) =&g 阅读全文
posted @ 2012-10-26 13:14 快乐. 阅读(209) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2486应该是做的第二道树形DP+背包问题题意:有颗苹果树n个节点,n-1条边,每个节点上有一定数量的苹果,每经过一条边花费一个单位时间,一共给了T个单位时间一棵树,从一个节点到另一个节点,如果不是父子关系的话,就要先返回父节点,再到另一个节点;总共给了T个单位时间,最后不一定再哪个节点,所以还有访问完子节点是否返回根节点的问题,为了表示是否返回,定义状态dp[i][j][0]表示不返回,dp[i][j][1]表示返回。这题就应该是这两点不好想吧。考虑好这两点,其它的就是考虑好转移过程了,理解好背包问题,不算难。代码://注意的是加边的时候, 阅读全文
posted @ 2012-10-20 17:14 快乐. 阅读(265) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1155题意:有n个点构成一棵树,节点1是广播站,2~n-m 是中转站,n-m+1~n是用户,从广播站传递信息,每经过一条边都有花费,不同的用户收听广播会支付不同的费用,问广播站在不亏本的情况下,最多有多少用户可以收听到广播解析:dp[i][j]表示i为根节点下j个用户收听的盈利(可以为负值)状态转移方程dp[u][i]=max(dp[u][i],dp[u][i-j]+dp[v][j]-edge[e].w);有题解说是01背包,但是我觉得从子节点到父节点转移就是分组背包,也是按分组背包处理的代码:#include<iostream> 阅读全文
posted @ 2012-10-20 16:57 快乐. 阅读(159) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=3535题意:T时间内做一些任务,每个任务花费一些时间,获取一些快乐值,让快乐值最大。任务分成多组,每组三种情况之一:1.至少选一个 2.至多选一个 3.任意选两天敲了两遍,很经典的题,得好好搞清背包才好做代码:#include<iostream>#include<cstdio>#include<cstring>#include<string>#define inf (1<<28)#define nMAX 110int dp[2][nMAX],w[nM 阅读全文
posted @ 2012-10-18 23:43 快乐. 阅读(150) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1712m天复习n门课程,得分最高代码:#include<iostream>#include<cstdio>#include<string>#include<cstring>#define nMAX 110using namespace std;int dp[nMAX],val[nMAX];int main(){ int n,m,i,j,v; while(~scanf("%d%d",&n,&m)) { if(n==0&& 阅读全文
posted @ 2012-10-18 23:40 快乐. 阅读(131) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2242很好的题目代码:#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#define inf (1<<30)#define nMAX 10005#define mMAX 20010using namespace std;int dfn[nMAX],low[nMAX],belon[nMAX],sta[nMAX],top 阅读全文
posted @ 2012-10-17 23:47 快乐. 阅读(149) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2196题意:仔细分析题意可知n(n<=10000)台计算机形成一棵树,每条边都有权值,求每台计算机传递信息最远可传多远,用图论解的话数据量太大,搜索,最长路都会超时的。况且是树,很有特点这个题是看完题解敲的,算是第二个树形DP进行两次dfs,第一次向下求出每个节点到其子树的最长距离和次长距离,第二次dfs通过向上(父节点)更新最长和次长距离,,,叙述的那么乱呢其中的思想该仔细体会代码:#include<iostream>#include<cstdio>#include<cs 阅读全文
posted @ 2012-10-15 23:28 快乐. 阅读(172) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1520题意:n个点构成一棵树,每个点都有一个权值,从中选出一些点,使权值之和最大,所选择的点不能直接相连,即不能是父子关系算是树形DP的入门题吧dp[i][0]表示不选i点,dp[i][1]表示选择该点dp[i][0]=sum(max(dp[j][0],dp[j][1])) j是i的子节点dp[i][1]=sum(dp[j][0])+val[i]; 代码:#include<iostream>#include<cstdio>#include<cstring>#include& 阅读全文
posted @ 2012-10-15 23:17 快乐. 阅读(120) 评论(0) 推荐(0) 编辑
摘要: http://acm.nankai.edu.cn/p1137.html区间DP#include<iostream>#include<cstdio>#include<cstring>#include<string>#define inf (1<<26)#define ll __int64#define nMAX 205using namespace std;int sum[nMAX],dpm[nMAX][nMAX],dpM[nMAX][nMAX];int a[nMAX],n;int min(int a,int b){ return a& 阅读全文
posted @ 2012-10-11 22:13 快乐. 阅读(162) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1185中文题目,开始觉得跟上个题目,种玉米那个一样的,只是这个是第三行受前两行的影响,,,后来发现不是。种玉米是最后有多少组合,这个是最多放多少部队,稍稍一变就行了总体来说,这个题不是很难,还可以,就是我写的很纠结 MLE,TLE 用滚动数组解决了MLE,二进制预处理解决TLE 最后还是跑了1400+MS代码://开始还MLE,dp[103][MAX+5][MAX+5]确实是超,后来用了滚动数组改成了TLE,最后预处理还跑了1400+MS#include<iostream>#include<cstdio>#inclu 阅读全文
posted @ 2012-10-06 20:36 快乐. 阅读(143) 评论(0) 推荐(0) 编辑