$\large{\text{一千个Oier程序中有一千种树形DP}}$

思路都差不多的,但是每个人都有自己的状态定义与转移

不妨定义$dp[i][j]$表示,在$i$子树内,偷$j$张画,且不考虑根到$i$父节点路径代价的最短时间

$a[i]$表示$i$与其父节点的距离

$d[i]$表示$i$到根节点的距离

不难想出转移

$\large{dp[i][j]=min\left\{dp[son1][k]+dp[son2][j-k]+dis[x]\right\}}$

统计答案

枚举每个节点选几个,如果$dp[i][j]+d[i]-a[i]<=s$,更新答案

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int size[],s,cnt,a[],v[],e[][],dp[][],ans,d[];
void init(int x)
{
int t,to;
if(scanf("%d%d",&t,&to)!=)
return;
d[x]+=*t,a[x]=*t,dp[x][]=;
if(to)
v[x]=to;
else
{
d[++cnt]=d[x],init(e[x][]=cnt);
d[++cnt]=d[x],init(e[x][]=cnt);
}
}
void dfs(int x)
{
if(!x)
return;
dfs(e[x][]),dfs(e[x][]);
size[x]=v[x]+size[e[x][]]+size[e[x][]];
if(v[x])
for(int i=;i<=v[x];i++)
dp[x][i]=a[x]+dp[x][]+*i;
else
for(int i=;i<=size[x];i++)
for(int j=;j<=i;j++)
dp[x][i]=min(dp[x][i],dp[e[x][]][j]+dp[e[x][]][i-j]+a[x]);
}
int main()
{
scanf("%d",&s);
memset(dp,0x3f,sizeof(dp));
init(++cnt);
dfs();
for(int i=;i<=cnt;i++)
for(int j=;j<=size[i];j++)
if(dp[i][j]+d[i]-a[i]<s)
ans=max(ans,j);
printf("%d\n",ans);
return ;
}

最新文章

  1. oracle Net Manager 服务命名无法配置(无法新建、添加服务名)
  2. The last packet successfully received from the server was 2,926,157 milliseconds ago. The last packet sent successfully to the server was 2,926,158 milliseconds ago. is longer than the server configured value of 'wait_timeout'. 解决办法
  3. webstorage[html5的本地数据处理]
  4. ios专题 - 多线程非GCD(1)
  5. Pycharm常用快捷键(后期慢慢补充)
  6. 网页嵌入WMP代码(转)
  7. large-scale analysis of malware downloaders
  8. Code digest
  9. HDU 2516 取石子游戏 斐波纳契博弈
  10. 团队作业第六次—团队Github实战训练
  11. String补充
  12. iOS __block 关键字的底层实现原理 -- 堆栈地址的变更
  13. 《python for data analysis》第八章,绘图与可视化
  14. 【原创】Python第二章——行与缩进
  15. 阅读Java Native源码前的准备
  16. HTML5 读取上传文件(转载)
  17. 系统安装-007 CentOS7yum源添加、删除及其yum优化(转)
  18. 【Intel AF 2.1 学习笔记三】
  19. .NET/C# 项目如何优雅地设置条件编译符号?
  20. TLD(Tracking-Learning-Detection)一种目标跟踪算法

热门文章

  1. IntelliJ IDEA之如何提交代码到SVN服务器
  2. Spring之AOP操作术语说明
  3. 当数据库字段与model字段规则不一致时候 需要在xml里面手工转换
  4. 开始学习Scheme
  5. word 里面没输入法
  6. Libre 6009 「网络流 24 题」软件补丁 / Luogu 2761 软件安装问题 (最短路径,位运算)
  7. Random Projection在k-means的应用
  8. Kafka 温故(一):Kafka背景及架构介绍
  9. .NET面试题系列(五)数据结构(Array、List、Queue、Stack)及线程安全问题
  10. 使用storyboard显示UITableView时,如果不修改系统默认生成的tableView:cellForRowAtIndexPath:方法中的代码,则必须为UITableViewCell注册(填写)重用标识符:identifier.必须要代码方法中的标识符一致.