【题目链接】

点击打开链接

【算法】

树形DP

f[i][j]表示以i为根的子树中,选了j个叶子节点,所能带来的最大收益

不难发现这就是一个经典的背包问题,不过是在树上做背包罢了

最后,判断f[1][i]是否大于等于0,输出最大的i

【代码】

#include <algorithm>
#include <bitset>
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <limits>
#include <list>
#include <map>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <utility>
#include <vector>
#include <cwchar>
#include <cwctype>
#include <stack>
#include <limits.h>
using namespace std;
#define MAXN 3010
const int INF = 2e9; int i,j,a,c,k,x,n,m;
vector< pair<int,int> > e[MAXN];
int size[MAXN],f[MAXN][MAXN]; inline void dfs(int x)
{
int i,j,k,y,cost;
for (i = ; i < e[x].size(); i++)
{
y = e[x][i].first;
cost = e[x][i].second;
dfs(y);
size[x] += size[y];
for (j = size[x]; j >= ; j--)
{
for (k = ; k <= size[y]; k++)
{
if (j >= k && f[x][j-k] != -INF && f[y][k] != -INF)
f[x][j] = max(f[x][j],f[x][j-k]+f[y][k]-cost);
}
}
}
} int main()
{ scanf("%d%d",&n,&m);
for (i = ; i <= n; i++)
{
for (j = ; j <= m; j++)
{
f[i][j] = -INF;
}
}
for (i = ; i <= n - m; i++)
{
scanf("%d",&k);
for (j = ; j <= k; j++)
{
scanf("%d%d",&a,&c);
e[i].push_back(make_pair(a,c));
}
} for (i = n - m + ; i <= n; i++)
{
scanf("%d",&x);
size[i] = ;
f[i][] = x;
} dfs(); for (i = m; i >= ; i--)
{
if (f[][i] >= )
{
printf("%d\n",i);
break;
}
} return ; }

最新文章

  1. SQL 统计两个表的数据,按同一日期分组
  2. php strtotime 在32位操作系统下的限制
  3. js 将json对象转成字符串
  4. EventBus的使用,数据传递
  5. linux环境下安装mysql数据库遇到的问题
  6. Unity3D 双摇杆 c# JoyStick 实现自己的双摇杆
  7. 使用Nginx负载均衡搭建高性能.NETweb应用程序一
  8. java中String类、StringBuilder类和StringBuffer类详解
  9. 2016 Multi-University Training Contest 1 Necklace 环排+二分匹配
  10. exchange邮箱的”单点登陆“
  11. 你有PSD的学位吗? - dp的日志 - 网易博客
  12. Delphi判断一个字符是否为汉字的最佳方法
  13. 2016年中国大学生程序设计竞赛(杭州)1006 Four Operations
  14. python之路——25
  15. 深入学习sequoiadb巨杉数据库及python连接方式
  16. android stdio Error Could not find com.android.tools common 25.2.2
  17. ubuntu完全卸载apache2
  18. DataTable快速定制之Expression属性表达式
  19. 【BZOJ】1485: [HNOI2009]有趣的数列
  20. CodeForces 772A Voltage Keepsake

热门文章

  1. 【HTML/XML 5】使用XSL给XML文档添加样式
  2. HDU 4821 字符串hash
  3. 两行代码快速创建一个iOS主流UI框架
  4. 潜伏者(codevs 1171)
  5. HDU 2352 Verdis Quo
  6. Tsinghua OJ Zuma
  7. ACM-ICPC 2018 沈阳赛区网络预赛 G 容斥原理
  8. TList实现的任务队列
  9. Spring Security教程(5)---- 国际化配置及UserCache
  10. 关于对FLASH开发,starling、starling feathers、starling MVC框架的理解