树形dp-洛谷 P2014 选课
来源:互联网 发布:搜狗输入法 mac 10.7 编辑:程序博客网 时间:2024/06/11 00:34
https://www.luogu.org/problem/show?pid=2014
我一开始想不出来,看了题解后却发现是最基本的模型
唉~
这里因为是森林所以我们简单的把森林合并到一个节点0;
f[i][j]表示再i点的子孙里取j个的解;
当然不包括i;
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>#include<cmath>#define Ll long longusing namespace std;struct cs{ int to,next,vv;}a[3001];int head[3001],v[3001],f[3001][3001];int n,m,ll,x,y,z,nn;void init(int x,int y){ ll++; a[ll].to=y; a[ll].next=head[x]; head[x]=ll;}int dfs(int x){ f[x][0]=v[x]; if(head[x]==-1)return 1; int sum=0,son; for(int k=head[x];k!=-1;k=a[k].next){ son=dfs(a[k].to); sum+=son; for(int j=sum;j;j--) for(int i=0;i<=son;i++) if(j-i-1>=0)//这个-1,1代表a[k].to节点本身 f[x][j]=max(f[x][j],f[x][j-i-1]+f[a[k].to][i]); } return sum+1;//这个+1,加上想节点自己 }int main(){ memset(head,-1,sizeof head); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d%d",&x,&v[i]); init(x,i); } nn=dfs(0); printf("%d",f[0][m]);}
0 0
- 树形dp-洛谷 P2014 选课
- 树形DP 洛谷P2014 选课
- (洛谷P2014 选课)<树形DP>
- 洛谷 p2014 [CTSC2001] 选课 树形背包DP
- [题解] P2014 选课(树形DP+拓扑)
- luogu P2014 选课 树形背包
- 洛谷 P2014 选课
- 洛谷P2014 选课
- [洛谷p2014]选课
- 洛谷P2014 选课
- 洛谷P2014 选课
- 洛谷 P2014 选课
- 洛谷P2014 选课
- 洛谷 P2014 选课
- |洛谷|动态规划|P2014 选课
- 洛谷 2014 选课 树形DP 解题报告
- 【codevs1378】选课 树形DP
- 选课 树形DP
- Qt浮动窗口
- 方法传参,传对象和传对象的属性区别
- 计划刚开始的方式
- python pickle模块序列化反序列化---存储对象
- C语言
- 树形dp-洛谷 P2014 选课
- 关于浅拷贝和深拷贝
- POJ 1179 Polygon(区间DP)
- 音量调节
- Round E APAC Test 2017 Problem A. Diwali lightings (C++)
- 更改主机名
- iOS UICollectionView笔记
- linux 文件操作
- Bootstrap的栅格化布局样式