hdu 1011 树状dp。。
来源:互联网 发布:网络歌手曹菲儿 编辑:程序博客网 时间:2024/06/08 05:14
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011
题目大意:由n个节点构成一棵树,通过每个节点有消耗((bug+19)/20),每个节点还有一个价值,开始有士兵m人,问从1节点开始往下走最多获得多少价值
题目思路:树状dp,dp[i][j]表示以i节点为根节点且消耗j能量时能获得的最大价值。状态转移方程:dp[u][j] = max(dp[u][j],dp[u][j-k]+dp[v][k])
#include<cstdio>#include<iostream>#include<cstring>using namespace std;int n,m;const int maxn = 110;struct XX{ int num,val;}nn[maxn];struct Side{ int next,v;}side[maxn*5];int node[maxn],top;void add_side(int u,int v){ side[top]=(Side){node[u],v}; node[u]=top++;}int dp[maxn][maxn],vis[maxn];void dfs(int u){ vis[u] = 1; int num = (nn[u].num+19)/20; for(int i=num;i<=m;i++) dp[u][i] = nn[u].val; for(int i=node[u];i!=-1;i=side[i].next){ int v = side[i].v; if(vis[v])continue; dfs(v); for(int j = m;j>=num;j--){ for(int k = 1;k+num<=j;k++){ dp[u][j] = max(dp[u][j],dp[u][j-k]+dp[v][k]); } } }}int main(){ while(cin>>n>>m){ memset(dp,0,sizeof(dp)); memset(node,-1,sizeof(node)); memset(vis,0,sizeof(vis)); top=0; if(n==-1&&m==-1)break; for(int i=1;i<=n;i++) cin>>nn[i].num>>nn[i].val; for(int i=1;i<n;i++){ int a,b; cin>>a>>b; add_side(a,b); add_side(b,a); } if(m==0){printf("0\n");continue;} dfs(1); printf("%d\n",dp[1][m]); } return 0;}
关于状态转移的方向。。dp做的少。。然后就出问题了Orz
dp[u][j] = max(dp[u][j],dp[u][j-k]+dp[v][k]);
dp[u][j] 需要dp[u][j-k]去更新他的值,所以j应该是减小的,这样更新j的时候就能确保j-k是没更新过的(就是01背包那样。。)
0 0
- hdu 1011 树状dp。。
- HDU 1011 Starship Troopers 树状DP
- 树状DP- hdu 1011 Starship Troopers
- hdu 1011 Starship Troopers_树状dp
- HDU 1011 Starship Troopers(树状背包dp)
- hdu-1011-Starship Troopers-树状dp-java
- hdu 3586 树状dp
- hdu 1520 树状 dp
- HDU 2412 树状DP
- HDU 2196 树状DP
- HDU 4003 树状DP
- hdu 6035-树状DP
- HDU 1011 Starship Troopers 树状dp+dp背包
- HDU 4123 树状DP+RMQ
- hdu 3450 树状数组 + dp
- hdu 2836 树状数组 + DP
- hdu 3450(树状数组+dp)
- hdu 2196 computer 树状dp
- Atitit. C# java 的api 目录封装结构映射总结
- leetcode-Subsets II
- leetcode-Jump Game
- HDU 5046 DLX
- 数论总结
- hdu 1011 树状dp。。
- c++输出缓冲区刷新
- 集合框架3:Set集合
- 居中没有宽度的元素
- 动态连通性算法分析总结
- HashMap和HashTable的区别
- linux inode理解
- leetcode-Unique Binary Search Trees II
- Mac OS使用技巧之十五:快捷方便的Mini Dock