讨论 / 不懂楼下大神做法,就这么简单粗暴AC
lijie201602 2017-09-10 01:14:27
点我顶贴 收藏 删除
#include<cstdio>

#include<cstring>

int l[1010],r[1010],a[1010],f[1010][1010],n,m;

int max(int a,int b) { return a>b?a:b; }

void dfs(int x,int y)

{

if(x<=0 || y<=0 || f[x][y]>0) return ;

dfs(r[x],y);

f[x][y]=f[r[x]][y];

for(int i=0;i<y;i++)

{

dfs(l[x],i);

dfs(r[x],y-i-1);

f[x][y]=max(f[x][y],f[l[x]][i]+f[r[x]][y-i-1]+a[x]);

}

}

int main()

{

scanf("%d %d",&n,&m);

for(int i=1;i<=n;i++) scanf("%d",&a[i]);

for(int i=1;i<=n;i++)

{

int x,y; scanf("%d %d",&x,&y);

r[y]=l[x]; l[x]=y;

}

memset(f,0,sizeof(f));

dfs(l[0],m);

printf("%d",f[l[0]][m]);

return 0;

}

#1 Instudy@2020-02-15 01:03:52
回复 删除
那是因为数据水
查看更多回复
提交回复