为啥爆零了啊
查看原帖
为啥爆零了啊
391298
hyf325楼主2020/10/3 16:12
#include <iostream>
using namespace std;
int a[410],b[410],dp[410][1010],t;
void inp(int x)
{
	cin>>a[x]>>b[x];
	a[x]*=2;
	if(b[x]==0)
	{
		inp(2*x);
		inp(2*x+1);
	}
}
void dfs(int x,int ti)
{
	int i,j;
	if(b[x]!=0)
	{
		for(i=1;i<=b[x]&&ti+5*i<=t;i++)
		{
			dp[x][ti+5*i]=dp[x][ti]+i;
		} 
		return ;
	}
	dfs(2*x,t+a[2*x]);
	dfs(2*x+1,t+a[2*x+1]);
	for(i=0;i<=t-ti;i++)
	{
		for(j=0;j<=t-ti-i;j++)
		{
			dp[x][ti+i+j]=max(dp[x][ti+i+j],dp[x*2][ti+i]+dp[x*2+1][ti+j]);
		}
	}
}
int main()
{
	int i,j,k,x,y;
	cin>>t;
	t--;
	inp(1);
	dfs(1,a[1]);
	cout<<dp[1][t]<<endl; 
   return 0;
}

2020/10/3 16:12
加载中...