HDU 5534:Partial Tree(完全背包)***
2024-08-31 23:23:41
题意
给出一个n个结点的树,给出n-1个度的权值f[],代表如果一个点的度数为i,那么它对于答案的贡献有f[i]。问在这棵树最大的贡献能达到多少。
思路
对于这个图,有n*2-2个度可以分配(看成一条链的形状),首先可以确定n个点,那么每个点都是要分配一个度的,因此现在有n个f[1],还有n-2个度没有分配。那么这n-2就可以当做背包容量,对于每一种度,像完全背包一样去枚举用多少种最优。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const int N = 1e4 + 11;
int f[N], dp[N];
int main() {
int n, t; scanf("%d", &t);
while(t--) {
scanf("%d", &n);
memset(dp, -INF, sizeof(dp));
dp[0] = 0;
for(int i = 1; i < n; i++) scanf("%d", &f[i]);
for(int i = 1; i < n - 1; i++) // 有n-2种物品分配,每个物品可以用无限次,这里偏移了1,实际上只用2至n-1
for(int j = i; j < n - 1; j++) // 背包最大容量为n-2,像完全背包一样枚举
dp[j] = max(dp[j], dp[j-i] + f[i+1] - f[1]); // 将1号结点换成i号结点
printf("%d\n", dp[n-2] + n * f[1]);
}
return 0;
}
最新文章
- mongodb学习2---常用命令解析
- 使用线程池模拟处理耗时任务,通过websocket提高用户体验
- js事件代理
- 在Windows下用Eclipse+CDT+MinGW搭建C++开发平台
- java_tomcat_the_APR based Apache Tomcat 小喵咪死活启动报错_临时方案
- hdu 1028 Ignatius and the Princess III(母函数入门+模板)
- ECMAScript 6.0 简介
- iphone 4s页面引用jssdk无效
- properties类是Hashtable的子类
- <;%@ Register TagPrefix=";uc1"; TagName=";user"; Src=";../Control/user.ascx"; %>;什么意思?
- Perl IO:操作系统层次的IO
- 【C/C++】Dijkstra算法的简洁实现
- Centos下普通用户设置sudo权限
- 洛谷P2054 [AHOI2005]洗牌(扩展欧几里德)
- eclipse去掉所有断点 恢复到默认窗口
- 简单了解一下php的迭代生成器yield
- (一)PHP简介
- 签名Cookie
- 【算法】插入排序(Insertion Sort)
- rem布局计算(移动端,pc端有兼容性)