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