The Chocolate Spree

对拍拍了半天才知道哪里写错了。。

dp[ i ][ j ][ k ]表示在 i 这棵子树中有 j 条链, 是否有链延伸上来。

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. #define fi first
  4. #define se second
  5. #define mk make_pair
  6. #define PLL pair<LL, LL>
  7. #define PLI pair<LL, int>
  8. #define PII pair<int, int>
  9. #define SZ(x) ((int)x.size())
  10. #define ull unsigned long long
  11.  
  12. using namespace std;
  13.  
  14. const int N = 1e5 + ;
  15. const int inf = 0x3f3f3f3f;
  16. const LL INF = 0x3f3f3f3f3f3f3f3f;
  17. const int mod = ;
  18. const double eps = 1e-;
  19. const double PI = acos(-);
  20.  
  21. int n, a[N];
  22. LL dp[N][][];
  23.  
  24. vector<int> G[N];
  25.  
  26. inline bool chkmax(LL &a, LL b) {
  27. return a < b ? a = b, true : false;
  28. }
  29.  
  30. void dfs(int u, int fa) {
  31. LL tmp[][];
  32. LL gg[][];
  33. dp[u][][] = ;
  34. for(int i = ; i < ; i++)
  35. for(int j = ; j < ; j++)
  36. tmp[i][j] = -INF;
  37. tmp[][] = ;
  38. for(auto& v : G[u]) {
  39. if(v == fa) continue;
  40. dfs(v, u);
  41. memcpy(gg, tmp, sizeof(gg));
  42. for(int i = ; i <= ; i++) {
  43. for(int j = ; j <= ; j++) {
  44. for(int x = ; x <= ; x++) {
  45. for(int y = ; y <= ; y++) {
  46. if(!i && j || !x && y) continue;
  47. if(j + y > ) continue;
  48. tmp[i + x][j + y] = max(tmp[i + x][j + y], gg[i][j] + dp[v][x][y]);
  49. }
  50. }
  51. }
  52. }
  53. }
  54. // dp[1][0]
  55. chkmax(dp[u][][], tmp[][] + a[u]);
  56. chkmax(dp[u][][], tmp[][]);
  57. chkmax(dp[u][][], tmp[][] + a[u]);
  58. chkmax(dp[u][][], tmp[][] + a[u]);
  59.  
  60. // dp[1][1]
  61. chkmax(dp[u][][], tmp[][] + a[u]);
  62. chkmax(dp[u][][], tmp[][] + a[u]);
  63.  
  64. //dp[2][0]
  65. chkmax(dp[u][][], tmp[][]);
  66. chkmax(dp[u][][], tmp[][] + a[u]);
  67. chkmax(dp[u][][], tmp[][] + a[u]);
  68.  
  69. //dp[2][1]
  70. chkmax(dp[u][][], tmp[][] + a[u]);
  71. chkmax(dp[u][][], tmp[][] + a[u]);
  72. chkmax(dp[u][][], tmp[][] + a[u]);
  73. }
  74.  
  75. int main() {
  76. // freopen("test.in", "r", stdin);
  77. scanf("%d", &n);
  78. for(int i = ; i <= n; i++) G[i].clear();
  79. for(int i = ; i <= n; i++) scanf("%d", &a[i]);
  80. for(int i = ; i < n; i++) {
  81. int u, v; scanf("%d%d", &u, &v);
  82. G[u].push_back(v);
  83. G[v].push_back(u);
  84. }
  85. for(int i = ; i <= n; i++)
  86. for(int j = ; j < ; j++)
  87. for(int k = ; k < ; k++)
  88. dp[i][j][k] = -INF;
  89. dfs(, );
  90. LL ans = ;
  91. for(int i = ; i <= ; i++)
  92. for(int j = ; j <= ; j++)
  93. ans = max(ans, dp[][i][j]);
  94. printf("%lld\n", ans);
  95. return ;
  96. }
  97.  
  98. /*
  99. */

Codeforces 633F The Chocolate Spree 树形dp的更多相关文章

  1. codeforces 633F The Chocolate Spree (树形dp)

    题目链接:http://codeforces.com/problemset/problem/633/F 题解:看起来很像是树形dp其实就是单纯的树上递归,就是挺难想到的. 显然要求最优解肯定是取最大的 ...

  2. CF 633 F. The Chocolate Spree 树形dp

    题目链接 CF 633 F. The Chocolate Spree 题解 维护子数答案 子数直径 子数最远点 单子数最长直径 (最长的 最远点+一条链) 讨论转移 代码 #include<ve ...

  3. cf633F. The Chocolate Spree(树形dp)

    题意 题目链接 \(n\)个节点的树,点有点权,找出互不相交的两条链,使得权值和最大 Sol 这辈子也不会写树形dp的 也就是有几种情况,可以讨论一下.. 下文的"最大值"指的是& ...

  4. Codeforces 633F 树的直径/树形DP

    题意:有两个小孩玩游戏,每个小孩可以选择一个起始点,并且下一个选择的点必须和自己选择的上一个点相邻,问两个选的点权和的最大值是多少? 思路:首先这个问题可以转化为求树上两不相交路径的点权和的最大值,对 ...

  5. Codeforces 633F - The Chocolate Spree(树形 dp)

    Codeforces 题目传送门 & 洛谷题目传送门 看来我这个蒟蒻现在也只配刷刷 *2600 左右的题了/dk 这里提供一个奇奇怪怪的大常数做法. 首先还是考虑分析"两条不相交路径 ...

  6. codeforces 161D Distance in Tree 树形dp

    题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...

  7. codeforces 337D Book of Evil (树形dp)

    题目链接:http://codeforces.com/problemset/problem/337/D 参考博客:http://www.cnblogs.com/chanme/p/3265913 题目大 ...

  8. Codeforces 1276D - Tree Elimination(树形 dp)

    Codeforces 题面传送门 & 洛谷题面传送门 繁琐的简单树形 dp(大雾),要是现场肯定弃了去做 F 题 做了我一中午,写篇题解纪念下. 提供一种不太一样的思路. 首先碰到这样的题肯定 ...

  9. Codeforces 543D Road Improvement(树形DP + 乘法逆元)

    题目大概说给一棵树,树的边一开始都是损坏的,要修复一些边,修复完后要满足各个点到根的路径上最多只有一条坏的边,现在以各个点为根分别求出修复边的方案数,其结果模1000000007. 不难联想到这题和H ...

随机推荐

  1. LabVIEW-PC-PLC-MCU串口通信-介绍很全

    链接:https://pan.baidu.com/s/1dG9nuPN 密码:vnpf

  2. CodeVs 3150 (大数 + 递推)

    #include<iostream> #include<cstdio> #include<cstring> #include<string> #incl ...

  3. vue 上实现无缝滚动播放文字系统公告

    首先实现效果,当时的需求做的系统公告框设定一个宽度,超宽滚动播放,没超宽则静态展示,有了需求,想了下实现原理,最开始打算js更改字体内容的方式,但是想了下感觉会有点麻烦,想起之前做了表格的左侧边固定, ...

  4. EasyUI 如何结合JS导出Excel文件

    出处:http://blog.csdn.net/jumtre/article/details/41119991 EasyUI 如何结合JS导出Excel文件 分类: 技术 Javascript jQu ...

  5. Confluence 6 数据库表-系统信息(System information)

    这些表格有存储数据相关的状态和 Confluence 站点的相关配置信息. confversion 被用来在升级系统的时候确定那个数据库的版本应该使用,这个表格只对数据库升级有影响. pluginda ...

  6. Confluence 6 理解你许可证的用户数

    基于你的许可证类型,在你 Confluence 可以被注册的用户也许有限制. 在许可证明细页面中,将会告诉当前使用了多少的许可证(你注册的用户数量). 包括仅仅在 Confluence 中可以使用gl ...

  7. jquery 的鼠标事件/淡入淡出/绑定

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. gnuradio 初次使用

    参考链接: 入门 http://www.cnblogs.com/moon1992/p/5739027.html 创建模块 http://www.cnblogs.com/moon1992/p/54246 ...

  9. linux添加自定义命令

    想添加一个命令, 比如我输入 cdms 按回车, 然后就执行了: cd /mnt/gopath/src/test/app/ 这条命令方法: vi /etc/bashrc 在文件末尾添加 alias c ...

  10. 读书笔记——《You Don't Know JS》

    第一部:<You don't know JS: this & Object prototype> 第三章 Object 对象常量 var myObject = {}; Object ...