hdu1011 Starship Troopers(树形dp)
2015-03-31 23:25
302 查看
开始尝试写写博客
树形dp,111数组大小过不了runtime error好久以为是自己代码错了,赞
对一个点n,最多派出m个士兵,得到的最大可能保存在dp
[m]
计算方法是遍历所有子节点进行背包。
第一次做这种稍微复杂的题目做了一天,太鸡了得多练
顺便学到了无权图可以用vector保存邻接链表,挺好挺简洁。有权图应该也可以用pair
树形dp,111数组大小过不了runtime error好久以为是自己代码错了,赞
对一个点n,最多派出m个士兵,得到的最大可能保存在dp
[m]
计算方法是遍历所有子节点进行背包。
第一次做这种稍微复杂的题目做了一天,太鸡了得多练
顺便学到了无权图可以用vector保存邻接链表,挺好挺简洁。有权图应该也可以用pair
#include <iostream> #include <cstring> #include <cmath> #include <algorithm> #include <queue> #include <stack> #include <map> #include <fstream> #define NINF -999999999 #define ll long long using namespace std; struct point { int t; int brain; int edgelist; }caves[1111]; struct edge { int to; int next; }edges[1111]; int TotalEdge; void AddEdge(int u,int v) { edges[TotalEdge].to=v; edges[TotalEdge].next=caves[u].edgelist; caves[u].edgelist=TotalEdge++; } int n,m; int dp[1111][1111]; bool visited[1111]; void solve2(int n) //解出以某个节点为根的最多的possibility dp [0]到dp [m]; { for (int i=caves .t;i<=m;i++) //初始化 dp [i]=caves .brain; for (int i=0;i<caves .t;i++) dp [i]=0; visited =true; for (int tmp=caves .edgelist;tmp!=0;tmp=edges[tmp].next)//遍历所有的子树 { int tar(edges[tmp].to); if (visited[tar]) continue; solve2(tar); for (int i=m;i>=caves .t;i--) { for (int j=1;j<=i-caves .t;j++) dp [i]=max(dp [i],dp [i-j]+dp[tar][j]); } } } int main() { cin.sync_with_stdio(false); while (cin>>n>>m,n!=-1) { TotalEdge=1; for (int i=1;i<=n;i++) { cin>>caves[i].t>>caves[i].brain; //caves[i].t=(caves[i].t%20 ? 1 : 0) + caves[i].t / 20 ; caves[i].t=(caves[i].t+19)/20;//其他人代码看到的一种比较方便的计算类似情况的方法 caves[i].edgelist=0; visited[i]=false; } for (int i=0;i<n-1;i++) { int tp1,tp2; cin>>tp1>>tp2; AddEdge(tp1,tp2); AddEdge(tp2,tp1); } if (m==0) { cout<<0<<endl; continue; } solve2(1); cout<<dp[1][m]<<endl; } return 0; }
相关文章推荐
- ZOJ2111 HDU1011 Starship Troopers, 树形DP
- HDU1011:Starship Troopers(树形DP)
- hdu1011 Starship Troopers 树形DP
- HDU1011 Starship Troopers(树形dp)
- HDU1011 Starship Troopers(树形dp)
- hdu1011 Starship Troopers(树形dp)
- HDU 1011 Starship Troopers - 01树形dp 有坑啊!!
- hdu 1011 Starship Troopers 树形dp
- 【DP】HDU 1011 Starship Troopers 树形DP
- HDU 1011 Starship Troopers(树形DP)
- hdu 1011 Starship Troopers(树形DP)
- hdoj 1011 Starship Troopers 【树形DP + 01背包】
- hdu 1011 Starship Troopers (树形背包dp)
- HDU 1011 Starship Troopers 树形DP(0-1背包)
- hdu 1011 Starship Troopers(树形DP入门)
- [HDU 1011] Starship Troopers 树形dp
- hdu 1011 Starship Troopers 树形dp
- hdu 1011 Starship Troopers (依赖背包 树形dp)
- HDU 1011 - Starship Troopers (树形DP)
- 杭电OJ——1011 Starship Troopers(dfs + 树形dp)