求助
查看原帖
求助
282080
NewJeanss楼主2020/5/24 11:35
#include <bits/stdc++.h>
#define maxn 105
using namespace std;
int s,tot,pos,cnt;
int a[maxn],b[maxn],dp[maxn][605];
char str[500];
struct Node
{
	int val,lef,rig;
	int lefv,rigv;
}e[maxn];
void init()
{
	int i,j,num;
	getchar();
	cin.getline(str,sizeof(str));
	s--;
	for(i=0,cnt=0;i<strlen(str);i++)
	{
		num=0;
		for(j=i;str[j]!=' '&&j<strlen(str);j++)
			num=num*10+str[j]-'0';
		cnt++;
		if(cnt%2) a[cnt/2+1]=num;
		else b[cnt/2]=num;	
		i=j;
	}cnt/=2;
}
void build(int rt)
{
	if(e[rt].lef==0&&pos<cnt)
	{
		e[rt].lefv=a[++pos]*2;
		e[rt].lef=++tot;
		if(b[pos]!=0) e[tot].val=b[pos];
		else build(tot);
	}
	if(e[rt].rig==0&&pos<cnt)
	{
		e[rt].rigv=a[++pos]*2;
		e[rt].rig=++tot;
		if(b[pos]!=0) e[tot].val=b[pos];
		else build(tot);
	}
}
void dfs(int rt)
{
	if(e[rt].val!=0)
		for(int i=e[rt].val*5;i<=s;i++)
			dp[rt][i]=e[rt].val;
	if(e[rt].lef!=0) 
	{
		dfs(e[rt].lef);	
		for(int j=s;j>=e[rt].lefv;j--)
			for(int k=0;j-k>=e[rt].lefv;k++)
				dp[rt][j]=max(dp[rt][j],dp[rt][j-k]+dp[e[rt].lef][k]);
	}
	if(e[rt].rig!=0)
	{
		dfs(e[rt].rig);
		for(int j=s;j>=e[rt].rigv;j--)
			for(int k=0;j-k>=e[rt].rigv;k++)
				dp[rt][j]=max(dp[rt][j],dp[rt][j-k]+dp[e[rt].rig][k]);
	} 		
}
int main()
{
	while(cin>>s)
	{
		init(); 
		tot=1; pos=0; 
		memset(e,0,sizeof(e));
		build(1);    
		memset(dp,0,sizeof(dp));
		dfs(1);
		cout<<dp[1][s]<<endl;
		
		/*for(int i=1;i<=tot;i++)
		{
			for(int j=1;j<=s;j++)
				cout<<dp[i][j]<<" ";
			cout<<endl;
		}*/
	}
	return 0;
}

啊,我0分

请求大佬解答为什么错了

2020/5/24 11:35
加载中...