讨论 / 求大神查错,一直WA:80,我有数据,改了无数次,一直这样
GUA 2013-10-14 18:50:00
点我顶贴 收藏 删除
#include<cstdio>

#include<algorithm>

#include<cstdlib>

#include<iostream>

using namespace std;

int n,m,w[1000+10],l[1000+10],r[1000+10];

long long f[1000+10][100+10];

void readdata()

{

int x,y,t;

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

for(int i=1;i<=n;i++) {scanf("%d",&w[i]);f[i][1]=w[i];}

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

{

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

if(l[x]==0)l[x]=y;//转二叉树

else

{

t=l[x];

while(r[t]!=0)

{

t=r[t];

}

r[t]=y;

}

}

}

long long dfs(int k,int people)//动归

{

long long t=-2000000000,x;

if(f[k][people]!=0) return f[k][people];

if(k==0||people==0) return 0;

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

{

if(l[k]==0) break;

x=dfs(l[k],i);

}

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

{

if(r[k]==0) break;

x=dfs(r[k],i);

}

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

for(int j=0;j<people;j++)

if(i+j<people)t=max(t,f[r[k]][i]+f[l[k]][j]+w[k]);

t=max(t,f[r[k]][people]);

if(t>=0)return f[k][people]=t;

else return f[k][people]=0;

}

void work()

{

long long ans=dfs(l[0],m);

cout<<ans;

}

int main()

{

readdata();

work();

return 0;

}

#1 466925185@2013-10-14 01:17:00
回复 删除
1

s

#2 466925185@2013-10-14 01:17:00
回复 删除
1

1

]

#3 466925185@2013-10-14 01:18:00
回复 删除
t

t

#4 466925185@2013-10-14 01:18:00
回复 删除
t

t

#5 466925185@2013-10-14 01:18:00
回复 删除
t

t

#6 466925185@2013-10-14 01:18:00
回复 删除
t

t

#7 466925185@2013-10-14 01:18:00
回复 删除
t

t

#8 466925185@2013-10-14 01:18:00
回复 删除
t

t

#9 466925185@2013-10-14 01:18:00
回复 删除
t

t

#10 466925185@2013-10-14 01:18:00
回复 删除
1

r

查看更多回复
提交回复