懒虫读诗

[Link](第五届石家庄铁道大学程序设计竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com))

题意

给你一个森林,每个点都有权值,选某个点就一定要选它的父节点,问你选m个点的最大权值是多少。

题解

首先加一个权值为0的0号结点,每个树的根向他连一条边就变成了一颗树了。我们设f(i,j)f(i,j)f(i,j)表示以iii号结点为根的子树选了jjj篇文章的最大开心度之和,然后按照iii的每个子树选了几篇文章来划分状态进而转移这个过程,变成一个分组背包问题。我们依次枚举子树选多少和转移决策即可,注意至少选一个,因为有依赖性所以这个结点必须选,枚举决策时子树选则的文章和必须小于当前这个树的文章和,因为当前这个树的根一定选。

Code

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <set>
#include <queue>
#include <vector>
#include <map>
#include <bitset>
#include <unordered_map>
#include <cmath>
#include <stack>
#include <iomanip>
#include <deque>
#include <sstream>
#define x first
#define y second
#define debug(x) cout<<#x<<":"<<x<<endl;
using namespace std;
typedef long double ld;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef unsigned long long ULL;
const int N = 330, M = 2 * N, INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-8, pi = acos(-1), inf = 1e20;
#define tpyeinput int
inline char nc() {static char buf[1000000],*p1=buf,*p2=buf;return p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++;}
inline void read(tpyeinput &sum) {char ch=nc();sum=0;while(!(ch>='0'&&ch<='9')) ch=nc();while(ch>='0'&&ch<='9') sum=(sum<<3)+(sum<<1)+(ch-48),ch=nc();}
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int h[N], e[M], ne[M], idx;
void add(int a, int b, int v = 0) {e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}
int n, m, k;
int a[N], f[N][N];
int w[M];
void dp(int u) {for (int i = 1; i <= m + 1; i ++ ) f[u][i] = w[u];for (int i = h[u]; ~i; i = ne[i] ) {int j = e[i]; dp(j);for (int a = m + 1; a; a -- ) for (int b = 0; b < a; b ++)f[u][a] = max(f[u][a], f[u][a - b] + f[j][b]);}
}
int main() {ios::sync_with_stdio(false), cin.tie(0);cin >> n >> m;memset(h, -1, sizeof h);for (int i = 1; i <= n; i ++ ) {int u; cin >> u >> w[i];add(u, i);}dp(0);cout << f[0][m + 1] << endl;return 0;
}

懒虫读诗 (树形dp+分组背包)相关推荐

  1. hdu5148 树形dp,分组背包

    dp[i][j]表示以i为根节点的子树中选j个城市贡献边长的最小值,怎样由子树向上递推呢,子树是一个天然的组,dp[u][j]可以这样理解,u子树容量为j是由上一层dp[u][j-f]推出的,应用了滚 ...

  2. ZOJ 3450 Doraemon's Railgun (DP·分组背包)

    题意  多啦A梦有一个超电磁炮  然后要打死n堆敌人  在同一条射线上的敌人只有先打死前面的一堆才能打后面的一堆  给你打死某堆敌人需要的时间和这堆敌人的人数   问你在T0时间内最多打死多少个敌人 ...

  3. 牛客挑战赛34 A 能天使的愿望 (dp 分组背包)

    链接:https://ac.nowcoder.com/acm/contest/2271/A 来源:牛客网 题目描述 出题人寄给大家的一些闲话:参加了CSP-J/S 2019 的同学,考的都怎么样啊?不 ...

  4. HYSBZ - 1017 魔兽地图【树形DP依赖性背包】

    HYSBZ - 1017 Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA (Defen ...

  5. 树形dp+树形结构总结

    总结 最近写了好多树形dp+树形结构的题目,这些题目变化多样能与多种算法结合,但还是有好多规律可以找的. 先说总的规律吧! 一般来说树形dp在设状态转移方程时都可以用f[i][]表示i这颗子树怎么怎么 ...

  6. hdu 5148 树形dp,分组背包

    题目: 题目分析: 状态方程: dp[当前节点的标号][当前已经选取的城市数] 设已经选取的城市数是K 初始状态: dp[u][0] = dp[u][1] = 0 , 其他的将值设置为无穷大 树形转移 ...

  7. 洛谷:P4516 [JSOI2018] 潜入行动(树形dp、树上分组背包统计方案数)

    潜入行动 题意: 在树上每个点可以放置监控设备,监控该点周围的点(不包括该点),问刚好放置 k 个监控设备监控使得整棵树所有点都被监控的方案数是多少. 思路: 显然是个树形dp,k个监控自然联想分组背 ...

  8. BZOJ 2133 切割(树形DP,树上背包)大概是本题全网第一篇题解 >_<【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ 2133 切割这道题全网搜不到任何一篇题解 >_< 看评测记录也没有几个人AC- ...

  9. 【每日DP】day 8、P2014 [CTSC1997]选课(树形DP(树形背包)模板)难度⭐⭐⭐

    P2014 [CTSC1997]选课 题意为选一门课前要看它是否有前提条件:即选了一门主课才能选 "副科",所以可以树形背包来做. 注意是不能用分组背包来做,因为这道题附件有很多个 ...

  10. POJ 1155 TELE 背包型树形DP 经典题

    由电视台,中转站,和用户的电视组成的体系刚好是一棵树 n个节点,编号分别为1~n,1是电视台中心,2~n-m是中转站,n-m+1~n是用户,1为root 现在节点1准备转播一场比赛,已知从一个节点传送 ...

最新文章

  1. mysql 建立root用户名和密码_MYSQL中5.7.10ROOT密码及创建用户
  2. python3 面向对象(一)
  3. msf rhosts设置文件_聊一聊基于 msf 的免杀项目测试过程
  4. 不职业不同睡姿,你是哪一种?
  5. 《C#3.0 in a Nutshell ,3rd Edition》之序言篇
  6. System.arraycopy
  7. 类似纪念碑谷的unity2d素材包_有哪些免费的音效素材网站?
  8. python解释器的提示符是shell嘛_从PowerShell语法错误运行Python脚本
  9. 如何在PHP开启gzip页面压缩实例
  10. 把VS Code打造成Java开发IDE,也挺爽!
  11. Sql语句查询当天本周本月记录的where条件
  12. AOJ-776 马的走法 动态规划
  13. 嵌入式开发--Altuim Designer生成的PCB文件过大,及其他日常技巧
  14. Redmi显示器调节亮度 27英寸/2k/ IPS技术/低蓝光
  15. 【原创】PC微信逆向分析の强制输出微信调式信息
  16. 不会吧,不会吧程序员这样的消费观
  17. 鸿蒙手机系统新桌面布局,鸿蒙系统是什么样的界面,详解华为鸿蒙系统
  18. 用大家的力量来总结一个目录(众人拾柴火焰高)
  19. 51单片机之8×8点阵显示(74HC595)
  20. Linux 内存分配

热门文章

  1. NVIDIA Jetson TK1学习与开发——简介(针对嵌入式系统应用释放 GPU 的潜能)
  2. Serval and Rooted Tree(树形dp)
  3. 【NFC】手机手环模拟门禁卡
  4. vue中使用tsx语法
  5. Codewars | 使用入门
  6. matlab的颜色映射colormap
  7. 关闭 自带日志_再也不是样子货! 丰田86改装日志(3)
  8. 利用黎曼几何分析EEG信号(四):集论初步与拓扑空间初步
  9. java 按照拼音排序_java List中元素按照拼音排序
  10. 浅谈产品原型制作与设计方法