JZOJ 5344. 摘果子
Description

Input

Output

Sample Input
7 9
39 6
13 2
22 6
7 4
-19 5
28 6
-17 1
2 1
3 2
4 1
5 4
6 2
7 3
Sample Output
52
Data Constraint

做法:一道非常经典的依赖背包问题,将树的dfs序求出后,设f[i][j]表示处理完i到n的数后毒素为j的最大价值。
状态转移如下:f[i][j]=max(f[i][j],f[i+1][j-p[i]]+v[i]) {选取当前果实}
f[i][j]=max(f[i][j],f[i+size[x]]){不选}
size[x]表示dfs序中第i位的点的子树大小。
#include <cstdio>
#include <cstring>
#include <iostream>
#define N 2007
#define M 10007
using namespace std;
int f[N][M],ls[N],tot,v[N],p[N],n,m,size[N],d[N],cnt;
struct edge{
int to,next;
}e[N*]; void Add(int x,int y){
e[++tot].to=y;
e[tot].next=ls[x];
ls[x]=tot;
} void Dfs(int x,int fa){
d[++cnt]=x;
for (int i=ls[x];i;i=e[i].next){
if (e[i].to==fa) continue;
Dfs(e[i].to,x);
size[x]+=size[e[i].to];
}
size[x]++;
} int main(){
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) scanf("%d%d",&v[i],&p[i]);
for (int i=;i<=n-;i++){
int x,y;
scanf("%d%d",&x,&y);
Add(x,y);
Add(y,x);
}
Dfs(,);
for (int i=n;i>=;i--)
for (int j=m;j>=;j--){
if (j-p[d[i]]>=) f[i][j]=max(f[i][j],f[i+][j-p[d[i]]]+v[d[i]]);
f[i][j]=max(f[i][j],f[i+size[d[i]]][j]);
}
int ans=;
for (int i=;i<=m;i++)
ans=max(ans,f[][i]);
printf("%d",ans);
}
JZOJ 5344. 摘果子的更多相关文章
- JZOJ 1775. 合并果子2 (Standard IO)
1775. 合并果子2 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 在一个果园里,多多已经将所有的果子 ...
- JZOJ 1774. 合并果子 (Standard IO)
1774. 合并果子 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 在一个果园里,多多已经将所有的果子打 ...
- C语言实现二叉树-04版
二叉树,通常应当是研究其他一些复杂的数据结构的基础.因此,通常我们应该精通它,而不是了解:当然,可能并不是每个人都认同这种观点,甚至有些人认为理解数据结构就行了!根本没有必要去研究如何实现,因为大多数 ...
- C语言实现二叉树-02版
---恢复内容开始--- 昨天,提交完我们的二叉树项目后,今天早上项目经理早早给我打电话: 他说,小伙子干的不错.但是为什么你上面的insert是recusive的呢? 你难道不知道万一数据量大啦!那 ...
- Workday为何迟迟不进入中国
全球知名HRM SaaS厂商Workday在世界各地攻城拔寨,俨然是HR SaaS的代名词,更是HRM市场的领导品牌.但是却单单在中国市场悄无声息,除了为数不多的海尔海外.联想海外等规模客户和部分ro ...
- tyvj1297 小气的小B
描述 其实你们都不知道,小B是很小气的.一天小B带着他的弟弟小B'一起去摘果子,走着走着,他们忽然发现了一颗长满了果子的树.由于弟弟长得太矮了,弟弟只有让哥哥小B帮他摘一些果子下来.哥哥小B说:&qu ...
- 罗辑思维CEO脱不花:关于工作和成长,这是我的121条具体建议
1 关于面对批评 01. 没有人对被批评感到高兴.如果有,TA撒谎. 02. 面对批评,得体的第一反应是“不急于解释,不反唇相讥”. 03. 每天,或者最长每周养成习惯,把自己存在的问题和造成的麻烦用 ...
- HDU - 6406 Taotao Picks Apples (RMQ+dp+二分)
题意:N个高度为hi的果子,摘果子的个数是从位置1开始从左到右的严格递增子序列的个数.有M次操作,每次操作对初始序列修改位置p的果子高度为q.每次操作后输出修改后能摘到得数目. 分析:将序列分为左.右 ...
- NOIP前的刷题记录
因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数 组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...
随机推荐
- Murano package
Murano have 2 package types: HOT package with Heat template inside and MuranoPL package with MuranoP ...
- android 开发-数据存储之文件存储
android的文件存储是通过android的文件系统对数据进行临时的保存操作,并不是持久化数据,例如网络上下载某些图片.音频.视频文件等.如缓存文件将会在清理应用缓存的时候被清除,或者是应用卸载的时 ...
- iOS 本地缓存实现 方案借鉴
在手机应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制,前面一篇文章介绍了iOS设备的内存缓存,这篇文章将设计一个本地缓存的机制. 功能需求 这个 ...
- C 碎片七 指针
一.地址和指针 程序在编译过程中,系统会根据变量类型分配一定长度的内存单元.内存区中的每个字节都有一个编号,该内存单元的初始编号就是变量的"地址/指针",该内存单元的长度就是变量的 ...
- 在spark2中的shell使用python3
在spark2中的shell使用python3 spark2.0.0中的python默认使用python2,可以通过以下两种方式之一使用python3: PYSPARK_PYTHON=python3 ...
- hibernate课程 初探单表映射1-5 hibernate第一个demo
hibernate 开发步骤:(hibernate4.2+mysql6.0) 1 hibernate配置文件(hibernate.cfg.xml) 2 持久化类 3 对象-关系映射文件 4 hiber ...
- JavaScript中函数声明和函数表达式的区别
声明一个函数: var x=1; foo(); function foo() { console.log(x);//1 } myfun();//报错 定义一个函数表达式: var myfun=myfo ...
- Vue打包后页面出现cannot get
学习Vue有大半个月了,然而遇到了不少坑,完全没有高手们那么容易,中间有不少值得记录下的东东,回头好好理理.先理下今天的: Vue打包命令简单啊,直接在命令行输入:npm run build 然而没一 ...
- Java中对jsonArray的排序,使用的是Gson
使用Gson对json解析字符串,转化为json对象. 先上代码: 下面是main方法里面的代码 package testJava; import java.util.ArrayList; impor ...
- 集成Ehcache
提醒 这一小节的是如何在应用层(service或者module或action类)中使用ehcache 准备工作 下载ehcache 你需要一个js文件 请务必阅读下面代码中的注释!! 分情况选 ...