【树形dp】vijos P1180 选课
题解:
http://www.cppblog.com/rakerichard/articles/105004.html
惊了,讨论子树大小能否dp真鸡儿麻烦,按照上面那份题解,可以不用分这么多类,可以直接用dp(U,K)表示能最多选K个,而非恰好选K个时的答案。
UPDATE:我真鸡儿傻逼,将不存在的结点记作0,根节点记作n+1,可以有效避免讨论结点的存在性。dp(0,K)=0。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int f[310][310],siz[310];
struct Node{
int lc,rc,v;
}T[310];
int n,m;
int dp(int U,int K){
if(f[U][K]!=-1){
return f[U][K];
}
if(K==0){
return f[U][K]=0;
}
if(siz[U]==1 && K==1){
return f[U][K]=T[U].v;
}
if(T[U].rc){
if(siz[T[U].rc]>=K){
f[U][K]=dp(T[U].rc,K);
}
if(siz[T[U].rc]>=K-1){
f[U][K]=max(f[U][K],dp(T[U].rc,K-1)+T[U].v);
}
}
if(T[U].lc){
if(!T[U].rc){
f[U][K]=max(f[U][K],dp(T[U].lc,K-1)+T[U].v);
}
else{
for(int j=0;j<K;++j){
if(siz[T[U].lc]>=j && siz[T[U].rc]>=K-j-1){
f[U][K]=max(f[U][K],dp(T[U].lc,j)+dp(T[U].rc,K-j-1)+T[U].v);
}
}
}
}
return f[U][K];
// f[U][K]=max(f[right[i]][j],d[left[i]][k]+d[right[i]][j-k-1]);
}
void dfs(int U){
siz[U]=1;
if(T[U].lc){
dfs(T[U].lc);
siz[U]+=siz[T[U].lc];
}
if(T[U].rc){
dfs(T[U].rc);
siz[U]+=siz[T[U].rc];
} }
int main(){
// freopen("vijos1180.in","r",stdin);
memset(f,-1,sizeof(f));
int x;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
scanf("%d%d",&x,&T[i].v);
if(!T[x].lc){
T[x].lc=i;
}
else{
int U=T[x].lc;
while(T[U].rc){
U=T[U].rc;
}
T[U].rc=i;
}
}
dfs(0);
printf("%d\n",dp(T[0].lc,m));
return 0;
}
【树形dp】vijos P1180 选课的更多相关文章
- [vijos P1180] 选课
这一周竟然都没好好码题目,不过至少把这题的树形DP给摸了个大概.吐槽一下自己,递归已经基本不会用了…QAQ!按老师的话来说“太危险了!” 此题用到多叉树转二叉树,左孩子是真正意义的孩子(先修完自己才能 ...
- vijos 1180 选课 树形DP
描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这M门课并考核通过就能获得 ...
- 选课 树形DP+多叉树转二叉树+dfs求解答案
问题 A: 选课 时间限制: 1 Sec 内存限制: 128 MB 题目描述 大 学里实行学分.每门课程都有一定的学分,学生只要选修了这门课并考核通过就能获得相应的学分.学生最后的学分是他选修的各门 ...
- 树形DP+(分组背包||二叉树,一般树,森林之间的转换)codevs 1378 选课
codevs 1378 选课 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 学校实行学分制.每门的必修课都有固定的学分 ...
- CH5402 选课【树形DP】【背包】
5402 选课 0x50「动态规划」例题 描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了 N(N≤300) 门的选修课程,每个学生可选课程的数量 M 是 ...
- joyOI 选课 【树形dp + 背包dp】
题目链接 选课 题解 基础背包树形dp #include<iostream> #include<cstdio> #include<cmath> #include&l ...
- Vijos p1518河流 树形DP
https://vijos.org/p/1518 这题代码我基本是抄的,实在太难想了.但是也学到了一些东西. 比如:多叉树转二叉树存,这个细细一想,确实使得在dfs的时候,实现起来方便很多. 说一说具 ...
- Vijos 1523 贪吃的九头龙 【树形DP】
贪吃的九头龙 背景 安徽省芜湖市第二十七中学测试题 NOI 2002 贪吃的九头龙(dragon) Description:OfficialData:OfficialProgram:Converted ...
- Vijos 1144 小胖守皇宫 【树形DP】
小胖守皇宫 描述 huyichen世子事件后,xuzhenyi成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步一岗,五步 ...
随机推荐
- 阅读关于DuReader:百度大规模的中文机器阅读理解数据集
很久之前就得到了百度机器阅读理解关于数据集的这篇文章,今天才进行总结!.... 论文地址:https://arxiv.org/abs/1711.05073 自然语言处理是人工智能皇冠上的明珠,而机器阅 ...
- Android中TextView设置字体
最近项目中出现把字体设置成宋体,微软雅黑,黑体,楷体等的需求; 度娘发现Android系统默认支持三种字体,分别为:“sans”, “serif”, “monospace",除此之外还可以使 ...
- Android应用程序App应用上线流程
对于很多初级开发者,可能对app应用上线不太了解,本文跟大家介绍一下怎么上线app应用.上线App并不是一件很困难的事情,App的应用功能也不需要很强大,甚至不用联网,只有简单的一两个页面的App应用 ...
- esp8266 IOT Demo 固件刷写记录
将编译好的固件按照下面地址刷写到esp8266 出现下面错误是因为刷写的设置不对,按照图上设置: load 0x40100000, len 26828, room 16 tail 12chksum 0 ...
- YUV颜色编码解析(转)
原文转自 https://www.jianshu.com/p/a91502c00fb0
- mysql主从复制、操作语句
授权 grant replication slave on *.* to slave@192.168.10.64 identified by "123456" 登录测试 mysql ...
- kernel defconfig
Some defconfig files are placed on below path. Only one *_defconfig can be selected. android/kernel/ ...
- python写一段脚本代码自动完成输入(目录下的所有)文件的数据替换(修改数据和替换数据都是输入的)【转】
转自:http://blog.csdn.net/lixiaojie1012/article/details/23628129 初次尝试python语言,感觉用着真舒服,简单明了,库函数一调用就OK了 ...
- RemoteBox 1.6 发布,VirtualBox 管理工具
RemoteBox 1.6 发布,VirtualBox 管理工具 http://www.lupaworld.com/article-230113-1.html 安装VirtualBox Extensi ...
- C语言string转int
再不用atoi函数接口时,将字符串型转换成整型. 例如:将字符串型“158”转换成整型158 int String2Int(char * buff) { ; ; '; index++) { value ...