题目链接:https://vjudge.net/problem/HDU-4276

题意:给出一棵树,起点为1,时间为V,终点为n,每个点有一个价值a[u],每条边有一个时间花费w,求在时间V内到达终点n可以获得的最大价值。

思路:

  考虑边有两种情况,一种是属于1->n路径上的(只用走一次),一种是不属于该路径上的(需要走两次),为了统一,不妨把V减去1-n路径上的权值和,然后把1->n路径上边的权值置为0。

  此时就转换为求在起点1,在时间V内回到起点的最大价值。用dp[u][j]表示在点u有时间j,最后回到点u的最大价值,dp[u][j]初始化为a[u](0<=j<=V),转移方程为:
    dp[u][j]=max(dp[u][j],dp[u][j-tmp-k]+dp[v][k]。

  其中v为u的子结点,tmp=2×w(u,v)。

AC代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std; int n,V,a[],e[][],dp1[],dp2[][]; void dfs1(int u,int fa){
dp1[u]=-;
if(u==n) dp1[u]=;
for(int i=;i<=n;++i)
if(e[u][i]!=-){
if(i==fa) continue;
dfs1(i,u);
if(dp1[i]!=-){
dp1[u]=dp1[i]+e[u][i];
e[u][i]=e[i][u]=;
}
}
} void dfs2(int u,int fa){
for(int j=;j<=V;++j)
dp2[u][j]=a[u];
for(int i=;i<=n;++i)
if(e[u][i]!=-){
if(i==fa) continue;
dfs2(i,u);
int tmp=*e[u][i];
for(int j=V;j>=tmp;--j)
for(int k=;k<=j-tmp;++k)
dp2[u][j]=max(dp2[u][j],dp2[u][j-tmp-k]+dp2[i][k]);
}
} int main(){
while(~scanf("%d%d",&n,&V)){
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
e[i][j]=-;
for(int i=;i<n;++i){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
e[u][v]=e[v][u]=w;
}
for(int i=;i<=n;++i)
scanf("%d",&a[i]);
dfs1(,);
if(V<dp1[]){
printf("Human beings die in pursuit of wealth, and birds die in pursuit of food!\n");
continue;
}
V-=dp1[];
dfs2(,);
printf("%d\n",dp2[][V]);
}
return ;
}

最新文章

  1. Git命令整理
  2. C 网页压力测试器
  3. 取消掉Transfer-Encoding:chunked
  4. Android 之 Window、WindowManager 与窗口管理
  5. BootStrap学习之先导篇——响应式网页
  6. Python OpenGL学习(1): 环境配置及错误篇
  7. Python 生成的页面中文乱码问题
  8. c++内存对齐 转载
  9. uml系列(七)——交互图
  10. USB的包结构及包分类
  11. Spring+SpringMVC+MyBatis整合进阶篇(四)RESTful实战(前端代码修改)
  12. C++的string类
  13. Python复习笔记(十一)TCP/IP协议
  14. 软件工程wc项目,基于py
  15. zepto.min.js
  16. Android JS 交互出现 Uncaught Error: Error calling method on NPObject
  17. webservice 客户端调用
  18. cobbler启动问题
  19. executeBatch()批量执行Sql语句
  20. HDU 2813

热门文章

  1. python--第四天练习题
  2. Ubuntu 蓝牙鼠标的问题
  3. List根据某字段去重,以及compareTo 浅解
  4. 安装Discuz
  5. 富文本编辑器粘贴word
  6. java试题复盘——11月25日
  7. Mysql 原理以及常见mysql 索引等
  8. tomcat+myeclipse+mysql环境搭建
  9. js返回函数, 函数名后带多个括号的用法及join()的注意事项
  10. np.random.choices的使用