hdu 5534 Partial Tree(完全背包)
2015-11-02 10:42
471 查看
题目链接:hdu 5534 Partial Tree
解题思路
首先度的总和为2(n-1),并且每个节点度不为0。如果用二维dp[i][j]表示第i个节点还剩j个度的最优值,是没问题,但是复杂度为o(n3)。但是其实每个节点都要分配一个度,那么我们先给每个节点分配一个度,剩下n-2的度分给n个点,可以减掉一维,dp[i]表示i个度的最优值,因为度的个数是严格小于节点个数的。背包转移的权值为val[i]-val[1](可能有负数)代码
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 3000; const int inf = 0x3f3f3f3f; int N, F[maxn], dp[maxn]; int solve (int n) { for (int i = 0; i <= n; i++) dp[i] = -inf; dp[0] = 0; for (int i = 2; i < N; i++) { for (int j = 0; j + i - 1 <= n; j++) dp[i+j-1] = max(dp[i+j-1], dp[j] + F[i]); } return dp ; } int main () { int cas; scanf("%d", &cas); while (cas--) { scanf("%d", &N); for (int i = 1; i < N; i++) scanf("%d", &F[i]); int ans = F[1] * N; for (int i = 2; i < N; i++) F[i] -= F[1]; printf("%d\n", ans + solve(N-2)); } return 0; }
相关文章推荐
- 你真的理解Java的按引用传递吗?
- android地址
- Centos 推荐使用xtrabackup备份数据库
- 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同
- angularJS 通过ajax方法提交到springMVC中文乱码的终极解决方法
- 你真的理解Java的按引用传递吗?
- 10月全球六大国际域名解析量统计:COM与NET增势强劲
- Android开发环境搭建(转载)
- 设置popupWindow显示位置以及点击其他位置取消弹出
- 美团大众点评合并:背后技术力量的对比回顾
- SQL union 从字符串转换日期和/或时间时,转换失败(基础知识不牢固导致坑爹的问题)
- 美团大众点评合并:背后技术力量的对比回顾
- Spinner的使用
- 【首届大数据社区研讨会】听技术大咖如何解读大数据
- YUV格式解析
- [Servlet]HttpServletResponse的二进制输出(获取应用程序中的资源再输出)、重定向、错误发送
- 入门正则
- numpy——nonzero
- SpringMVC记住密码功能
- OracleParameter中参数名必须是DB中已有字段:【 ORA-01745: 无效的主机/绑定变量名】