hdu 1011 Starship Troopers
来源:互联网 发布:剑倚天下进阶数据最新 编辑:程序博客网 时间:2024/05/17 04:54
树上的背包
#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <queue>#include <cmath>#include <cstring>using namespace std;const int MAXN = 110;int n, m;struct Node { int num,cost, val;}room[MAXN];int dp[MAXN][MAXN];bool vis[MAXN];vector<int>edge[MAXN];void dfs(int u){ vis[u]=1; if(u!=1&&edge[u].size()==1&&!room[u].cost){ room[u].cost=1; } for (int i = room[u].cost; i <= m; i++){ dp[u][i] = room[u].val; } for(int i=0;i<edge[u].size();i++){ int v = edge[u][i]; if(vis[v]) continue; dfs(v); for(int j=m ;j >= room[u].cost; j--){ for(int k=1;k<=j-room[u].cost;k++){ dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[v][k]); } } }}int main(){ while(scanf("%d%d",&n,&m)==2){ if(n==-1 && m == -1) break; for(int i=1;i<=n;i++){ int x; edge[i].clear(); scanf("%d%d",&x,&room[i].val); room[i].cost = x/20 + (x%20!=0); } for(int i=1;i<n;i++){ int a,b; scanf("%d%d",&a,&b); edge[a].push_back(b); edge[b].push_back(a); } if(m==0) { puts("0"); continue; } memset(dp,0,sizeof(dp)); memset(vis,0,sizeof(vis)); dfs(1); printf("%d\n",dp[1][m]); }}
0 0
- hdu 1011 Starship Troopers
- HDU 1011 Starship Troopers
- HDU 1011 Starship Troopers
- HDU 1011 Starship Troopers
- HDU 1011 Starship Troopers
- hdu 1011 Starship Troopers
- HDU 1011 Starship Troopers
- hdu 1011 Starship Troopers
- hdu 1011 Starship Troopers
- HDU 1011 Starship Troopers
- hdu 1011 Starship Troopers
- hdu 1011 Starship Troopers
- hdu 1011 Starship Troopers
- hdu 1011 Starship Troopers
- HDU 1011 Starship Troopers
- hdu 1011 Starship Troopers
- 【HDU】 1011 Starship Troopers
- hdu 【1011】Starship Troopers
- (转)第三方框架-UI界面类项目
- 安装CentOS
- C语言基础3:字符串函数的实现(笔试考题)
- GIT初学使用(二)- 实验分支的内容如何合并到主分支中
- Java学习笔记之IO 4
- hdu 1011 Starship Troopers
- Servlet生命周期
- gsoap 注意事项
- Hadoop深入研究(HDFS)---HDFS介绍
- Android应用内语言切换实现
- Android的RadioButton和checkBox的用法-android学习之旅(十九)
- 封装分页类
- poj1436 Horizontally Visible Segments
- uva 10106 Product(高精度大数乘法)