Codeforces 633F The Chocolate Spree 树形dp
对拍拍了半天才知道哪里写错了。。
dp[ i ][ j ][ k ]表示在 i 这棵子树中有 j 条链, 是否有链延伸上来。
- #include<bits/stdc++.h>
- #define LL long long
- #define fi first
- #define se second
- #define mk make_pair
- #define PLL pair<LL, LL>
- #define PLI pair<LL, int>
- #define PII pair<int, int>
- #define SZ(x) ((int)x.size())
- #define ull unsigned long long
- using namespace std;
- const int N = 1e5 + ;
- const int inf = 0x3f3f3f3f;
- const LL INF = 0x3f3f3f3f3f3f3f3f;
- const int mod = ;
- const double eps = 1e-;
- const double PI = acos(-);
- int n, a[N];
- LL dp[N][][];
- vector<int> G[N];
- inline bool chkmax(LL &a, LL b) {
- return a < b ? a = b, true : false;
- }
- void dfs(int u, int fa) {
- LL tmp[][];
- LL gg[][];
- dp[u][][] = ;
- for(int i = ; i < ; i++)
- for(int j = ; j < ; j++)
- tmp[i][j] = -INF;
- tmp[][] = ;
- for(auto& v : G[u]) {
- if(v == fa) continue;
- dfs(v, u);
- memcpy(gg, tmp, sizeof(gg));
- for(int i = ; i <= ; i++) {
- for(int j = ; j <= ; j++) {
- for(int x = ; x <= ; x++) {
- for(int y = ; y <= ; y++) {
- if(!i && j || !x && y) continue;
- if(j + y > ) continue;
- tmp[i + x][j + y] = max(tmp[i + x][j + y], gg[i][j] + dp[v][x][y]);
- }
- }
- }
- }
- }
- // dp[1][0]
- chkmax(dp[u][][], tmp[][] + a[u]);
- chkmax(dp[u][][], tmp[][]);
- chkmax(dp[u][][], tmp[][] + a[u]);
- chkmax(dp[u][][], tmp[][] + a[u]);
- // dp[1][1]
- chkmax(dp[u][][], tmp[][] + a[u]);
- chkmax(dp[u][][], tmp[][] + a[u]);
- //dp[2][0]
- chkmax(dp[u][][], tmp[][]);
- chkmax(dp[u][][], tmp[][] + a[u]);
- chkmax(dp[u][][], tmp[][] + a[u]);
- //dp[2][1]
- chkmax(dp[u][][], tmp[][] + a[u]);
- chkmax(dp[u][][], tmp[][] + a[u]);
- chkmax(dp[u][][], tmp[][] + a[u]);
- }
- int main() {
- // freopen("test.in", "r", stdin);
- scanf("%d", &n);
- for(int i = ; i <= n; i++) G[i].clear();
- for(int i = ; i <= n; i++) scanf("%d", &a[i]);
- for(int i = ; i < n; i++) {
- int u, v; scanf("%d%d", &u, &v);
- G[u].push_back(v);
- G[v].push_back(u);
- }
- for(int i = ; i <= n; i++)
- for(int j = ; j < ; j++)
- for(int k = ; k < ; k++)
- dp[i][j][k] = -INF;
- dfs(, );
- LL ans = ;
- for(int i = ; i <= ; i++)
- for(int j = ; j <= ; j++)
- ans = max(ans, dp[][i][j]);
- printf("%lld\n", ans);
- return ;
- }
- /*
- */
Codeforces 633F The Chocolate Spree 树形dp的更多相关文章
- codeforces 633F The Chocolate Spree (树形dp)
题目链接:http://codeforces.com/problemset/problem/633/F 题解:看起来很像是树形dp其实就是单纯的树上递归,就是挺难想到的. 显然要求最优解肯定是取最大的 ...
- CF 633 F. The Chocolate Spree 树形dp
题目链接 CF 633 F. The Chocolate Spree 题解 维护子数答案 子数直径 子数最远点 单子数最长直径 (最长的 最远点+一条链) 讨论转移 代码 #include<ve ...
- cf633F. The Chocolate Spree(树形dp)
题意 题目链接 \(n\)个节点的树,点有点权,找出互不相交的两条链,使得权值和最大 Sol 这辈子也不会写树形dp的 也就是有几种情况,可以讨论一下.. 下文的"最大值"指的是& ...
- Codeforces 633F 树的直径/树形DP
题意:有两个小孩玩游戏,每个小孩可以选择一个起始点,并且下一个选择的点必须和自己选择的上一个点相邻,问两个选的点权和的最大值是多少? 思路:首先这个问题可以转化为求树上两不相交路径的点权和的最大值,对 ...
- Codeforces 633F - The Chocolate Spree(树形 dp)
Codeforces 题目传送门 & 洛谷题目传送门 看来我这个蒟蒻现在也只配刷刷 *2600 左右的题了/dk 这里提供一个奇奇怪怪的大常数做法. 首先还是考虑分析"两条不相交路径 ...
- codeforces 161D Distance in Tree 树形dp
题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...
- codeforces 337D Book of Evil (树形dp)
题目链接:http://codeforces.com/problemset/problem/337/D 参考博客:http://www.cnblogs.com/chanme/p/3265913 题目大 ...
- Codeforces 1276D - Tree Elimination(树形 dp)
Codeforces 题面传送门 & 洛谷题面传送门 繁琐的简单树形 dp(大雾),要是现场肯定弃了去做 F 题 做了我一中午,写篇题解纪念下. 提供一种不太一样的思路. 首先碰到这样的题肯定 ...
- Codeforces 543D Road Improvement(树形DP + 乘法逆元)
题目大概说给一棵树,树的边一开始都是损坏的,要修复一些边,修复完后要满足各个点到根的路径上最多只有一条坏的边,现在以各个点为根分别求出修复边的方案数,其结果模1000000007. 不难联想到这题和H ...
随机推荐
- LabVIEW-PC-PLC-MCU串口通信-介绍很全
链接:https://pan.baidu.com/s/1dG9nuPN 密码:vnpf
- CodeVs 3150 (大数 + 递推)
#include<iostream> #include<cstdio> #include<cstring> #include<string> #incl ...
- vue 上实现无缝滚动播放文字系统公告
首先实现效果,当时的需求做的系统公告框设定一个宽度,超宽滚动播放,没超宽则静态展示,有了需求,想了下实现原理,最开始打算js更改字体内容的方式,但是想了下感觉会有点麻烦,想起之前做了表格的左侧边固定, ...
- EasyUI 如何结合JS导出Excel文件
出处:http://blog.csdn.net/jumtre/article/details/41119991 EasyUI 如何结合JS导出Excel文件 分类: 技术 Javascript jQu ...
- Confluence 6 数据库表-系统信息(System information)
这些表格有存储数据相关的状态和 Confluence 站点的相关配置信息. confversion 被用来在升级系统的时候确定那个数据库的版本应该使用,这个表格只对数据库升级有影响. pluginda ...
- Confluence 6 理解你许可证的用户数
基于你的许可证类型,在你 Confluence 可以被注册的用户也许有限制. 在许可证明细页面中,将会告诉当前使用了多少的许可证(你注册的用户数量). 包括仅仅在 Confluence 中可以使用gl ...
- jquery 的鼠标事件/淡入淡出/绑定
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- gnuradio 初次使用
参考链接: 入门 http://www.cnblogs.com/moon1992/p/5739027.html 创建模块 http://www.cnblogs.com/moon1992/p/54246 ...
- linux添加自定义命令
想添加一个命令, 比如我输入 cdms 按回车, 然后就执行了: cd /mnt/gopath/src/test/app/ 这条命令方法: vi /etc/bashrc 在文件末尾添加 alias c ...
- 读书笔记——《You Don't Know JS》
第一部:<You don't know JS: this & Object prototype> 第三章 Object 对象常量 var myObject = {}; Object ...