我是靠谱客的博主 漂亮短靴,最近开发中收集的这篇文章主要介绍codevs 1378选课 树形DP,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 int N,M,tl[303],tr[303],f[303][303],num[303],con[303];
 6 void insect(int fa,int now)
 7 {
 8
if (tl[fa]==0)
 9
{tl[fa]=now;}
10
else
11 
{
12
int i=tl[fa];
13
while (tr[i]!=0) i=tr[i];
14
tr[i]=now;
15 
}
16 }
17 void dfs(int x)
18 {
19
if (tr[x]!=0) dfs(tr[x]);
20
if (tl[x]!=0) dfs(tl[x]);
21
con[x]=con[tr[x]]+con[tl[x]]+1;
22
int i,j;
23
f[x][1]=num[x];
24
for (i=0;i<=con[tr[x]];++i)
25 
{
26
f[x][i]=max(f[x][i],f[tr[x]][i]);
27
for (j=0;j<=con[tl[x]];++j)
28
f[x][i+j+1]=max(f[x][i+j+1],num[x]+f[tr[x]][i]+f[tl[x]][j]);
29 
}
30 }
31 int main()
32 {
33
memset(f,0,sizeof(f));
34
memset(tl,0,sizeof(tl));
35
memset(tr,0,sizeof(tr));
36
memset(con,0,sizeof(con));
37
memset(num,0,sizeof(num));
38
scanf("%d %dn",&N,&M);
39
int i,j,x,y;
40
for (i=1;i<=N;++i)
41 
{
42
scanf("%d %dn",&x,&num[i]);
43 
insect(x,i);
44 
}
45
dfs(tl[0]);
46
printf("%dn",f[tl[0]][M]);
47 }

 

转载于:https://www.cnblogs.com/abclzr/p/5086770.html

最后

以上就是漂亮短靴为你收集整理的codevs 1378选课 树形DP的全部内容,希望文章能够帮你解决codevs 1378选课 树形DP所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部