HDU-4276 The Ghost Blows Light (树形DP+背包)
2016-04-09 17:02
585 查看
题目大意:在一个n个节点的树形迷宫中,1为起点,n为出口。每个节点上有一定价值的珠宝,在节点之间移动的时间已知,问在能走出迷宫的前提下并且不超过m的时间内能收集的最多珠宝是多少?
题目分析:在树上,从1到n的路径唯一。从1到n的唯一路径叫做主线路,要想走到出口,一定会经过主线路,也就是必须经过主线路上节点。在脱离主线路之前必须要预留出返回的时间。
代码如下:
题目分析:在树上,从1到n的路径唯一。从1到n的唯一路径叫做主线路,要想走到出口,一定会经过主线路,也就是必须经过主线路上节点。在脱离主线路之前必须要预留出返回的时间。
代码如下:
# include<iostream> # include<cstdio> # include<vector> # include<queue> # include<cstring> # include<algorithm> using namespace std; const int N=105; const int INF=1000000000; int n,m; int d ; int dp [N*5]; int g ; int w ,pre ; vector<int>e ; void init() { int a,b,c; for(int i=1;i<=n;++i) e[i].clear(); for(int i=1;i<n;++i){ scanf("%d%d%d",&a,&b,&c); g[a][b]=g[b][a]=c; e[a].push_back(b); e[b].push_back(a); } for(int i=1;i<=n;++i) scanf("%d",w+i); } void spfa() { fill(pre,pre+n+1,-1); fill(d+1,d+n+1,INF); queue<int>q; q.push(1); d[1]=0; while(!q.empty()) { int u=q.front(); q.pop(); for(int i=0;i<e[u].size();++i){ int v=e[u][i]; if(d[v]>d[u]+g[u][v]){ d[v]=d[u]+g[u][v]; pre[v]=u; q.push(v); } } } } void dfs(int u,int fa) { fill(dp[u],dp[u]+m+1,w[u]); for(int i=0;i<e[u].size();++i){ int v=e[u][i]; if(v==fa) continue; dfs(v,u); int t=2*g[u][v]; for(int j=m;j>=t;--j) for(int k=0;k+t<=j;++k) dp[u][j]=max(dp[u][j],dp[v][k]+dp[u][j-k-t]); } } void solve() { spfa(); if(d >m){ printf("Human beings die in pursuit of wealth, and birds die in pursuit of food!\n"); }else{ int u=n; while(pre[u]!=-1){ g[pre[u]][u]=g[u][pre[u]]=0; u=pre[u]; } m-=d ; dfs(1,-1); printf("%d\n",dp[1][m]); } } int main() { while(~scanf("%d%d",&n,&m)) { init(); solve(); } return 0; }
相关文章推荐
- php中合并数组的方法
- 继承
- Qt的常见编译错误
- 动态规划-最长公共子序列(LCS)
- git在国外项目管理平台https://tourscn.codebasehq.com上的使用
- Jmeter接口测试---webservices
- excel 妙用选择性粘贴
- 网络基础
- Python 练习实例10
- php关于盗链问题
- 关于node.js资料集
- 解析Funtion()构造函数
- php fopen()和file_get_contents() 区别介绍
- leetcode196-Delete Duplicate Emails(删除重复并且id较大的数据)
- 新建git,不能git push
- 算法_ LongestPalindromicSubstring
- 获取java项目的根目录-方法大全
- Android课程---优化ListView列表视图
- IOS开发UI系列之常用控件 UILabel, UITextField, UIButton, UIImageView等常用属性与方法
- hibernate自身一对多和自身多对多映射详解