题目链接:https://www.luogu.org/problemnew/show/P3360

题解:

首先我们把边上的消耗放到向下的点上,如果是叶子节点的话就先做一次0/1背包

发现这是一颗二叉树,转移的时候枚举给左儿子多少时间,右儿子多少时间就好

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
typedef long long ll; using std::max;
const int N=+;
ll n,tot=;
ll dp[N][N],w[N],c[N];
inline ll read()
{
char ch=getchar();
ll s=,f=;
while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<='') {s=(s<<)+(s<<)+ch-'';ch=getchar();}
return s*f;
}
void dfs(int now)
{
ll t=read(),x=read();
t<<=;
if (x)
{
for (ll i=;i<=x;i++) w[i]=read(),c[i]=read();
for (ll i=;i<=x;i++)
{
for (ll j=n;j>=c[i];j--) if (j-c[i]>=t) dp[now][j]=max(dp[now][j],dp[now][j-c[i]]+w[i]);
}
return;
}
ll l=++tot;dfs(tot);
ll r=++tot;dfs(tot);
for (ll i=t;i<=n;i++)
for (ll j=;j<=i-t;j++)
{
dp[now][i]=max(dp[now][i],dp[l][j]+dp[r][i-t-j]);
}
}
int main()
{
n=read();n--;
dfs();
printf("%lld\n",dp[][n]);
return ;
}

最新文章

  1. PHP实现RTX发送消息提醒
  2. arcgis api for js共享干货系列之二自定义Navigation控件样式风格
  3. github无法访问?试试修改hosts
  4. 去哪儿网2017校招在线笔试(前端工程师)编程题及JavaScript代码
  5. ios开发入门篇(三):UITableView简介
  6. Application.mk中APP_ABI 的含义
  7. TreeSet集合排序方式二:定制排序Comparator
  8. 开源纯C#工控网关+组态软件(三)加入一个新驱动:西门子S7
  9. 那些年我们一起用过的Hybrid App
  10. 浅析java程序的执行过程
  11. Java 连接 MySQL 数据库
  12. mac 删除文件不经过废纸篓解决办法
  13. 机器学习入门07 - 验证 (Validation)
  14. Ftp、Ftps与Sftp之间的区别
  15. mysql的group by查询
  16. Python爬虫(一)——开封市58同城租房信息
  17. Set &quot;$USE_DEPRECATED_NDK=true&quot; in gradle.properties to continue using the current NDK integration. 解决办法
  18. MySQL无损复制(转)
  19. visual studio Lua 调试
  20. TessorFlow学习 之 手写数字识别的搭建

热门文章

  1. Java相关知识(一)
  2. Codeforce 163 A. Substring and Subsequence DP
  3. hpc-ai比赛相关资料
  4. 在openwrt上编译一个最简单的ipk包
  5. VM虚拟机上的CentOS 7系统重置root用户密码
  6. winforms控件
  7. 05:Cave Cows 1 洞穴里的牛之一
  8. C# 分隔字符串成为字符串数组的方法(保留分隔符)
  9. shell脚本执行的三种方式
  10. Javascript平稳退化、渐进增强