递归建树,由题知该树是一棵二叉树,且除根节点外其它点的度为0或2。

dp[i][j]表示来到第i个走廊(还未走过这条走廊)还剩下j时间,能拿到最大的画的数量。

dp[i][j]=max(dp[i][j],dp[lson[i]][k]+dp[rson][last_time-k])

#include<cstdio>
#include<algorithm>
using namespace std;
int dp[200][700];
int id=0,x,y,s;
struct node
{
int t,l,r;
int v;
}tree[200];
void init(int now)
{
scanf("%d%d",&x,&y);
tree[now].t=x*2;
tree[now].v=y;
if(y!=0) tree[id].l=tree[id].r=-1;
else
{
tree[now].l=++id;init(id);
tree[now].r=++id;init(id);
}
}
int dfs(int now,int times)
{
if(dp[now][times]) return dp[now][times]; //记忆化
int last=times-tree[now].t;
if(last<0) return 0;
if(tree[now].l==-1) return dp[now][times]=min(tree[now].v,last/5);
int maxn=0;
for(int i=0;i<=last;i++)
{
maxn=max(maxn,dfs(tree[now].l,i)+dfs(tree[now].r,last-i)); /*这里会调用多次已经计算过的值*/
//计算左儿子i时间,右儿子last-i时间的最大偷画数
}
return dp[now][times]=maxn;
}
int main()
{
scanf("%d",&s);
init(0);
printf("%d\n",dfs(0,s));
return 0;
}

最新文章

  1. Thinkphp3.2----------------Thinkphp3.2的目录结构介绍
  2. 从体系架构上分析PRINCE2和pmp的区别
  3. js断点调试心得
  4. 你会swap吗,按值传递还是按引用?
  5. Java for LeetCode 060 Permutation Sequence
  6. WCF帮助类
  7. Linux权限体系总结
  8. Java Socket Example
  9. python运行时间计算之timeit
  10. copy指定目录下包括子目录中所有的文件
  11. EasyNetQ WithTopic过滤失效的解决方案
  12. 深圳奥特迅现金流量——RESSET数据库
  13. mysql中使用存储过程方法中的注意事项
  14. Unity插件扩展中组件常用的几个方法
  15. [JAVA]为什么==和equals总让新手迷惑? 详解 关系操作符 == 和 equals
  16. Windows下 Robhess SIFT源码配置
  17. 关于ajax请求,返回json数据格式
  18. 冒烟测试(smoke testing)
  19. Problem E: 编写函数:Swap (I) (Append Code)
  20. sql 游标 跳出循环 和进入下一个循环

热门文章

  1. &lt;未来世界的幸存者&gt; 读后感(现实篇和职业篇)【原创】
  2. Hive(一)Hive初识
  3. Oracle学习笔记——点滴汇总
  4. hdoj1203 I NEED A OFFER!(DP,01背包)
  5. ACM 水果 hdu 1263 一题多解
  6. CentOS配置远程日志服务器
  7. DNS隧道工具iodine
  8. Swift2.0语言教程之闭包
  9. 用profile协助程序性能优化
  10. MongoDB复制原理