60分求助
查看原帖
60分求助
537998
lpx2024楼主2023/2/19 17:25

WA两个点

#include<bits/stdc++.h>
using namespace std;
long long num,f[1010][1010],g[1010],h[1010],l[1010],r[1010],t,dp[1010],tim[1100][1010],val[1100][1010];
void read(int x){
	cin>>g[x]>>h[x];
	g[x]*=2;
	if(h[x]==0){
		l[x]=2*x;
		read(2*x);
		r[x]=2*x+1;
		read(2*x+1);
 	} else {
 		for(int i=1;i<=h[x];i++){
			cin>>val[i][x]>>tim[i][x];
		}
	}
}
int dfs(int x,int lef){
	if(x==0 || lef<=0) return 0;
	int ans=0;
	lef-=g[x];
	if(f[x][lef]!=0) return f[x][lef];
	if(h[x]!=0){
		memset(dp,0,sizeof(dp));
		for(int j=1;j<=h[x];j++){
			for(int i=lef;i>=tim[j][x];i--){
				dp[i]=max(dp[i],dp[i-tim[j][x]]+val[j][x]);
			}
		}
		f[x][lef]=dp[lef];
		return dp[lef];
	}
	else{
		for(int k=0;k<=lef;k++) ans=max(ans,dfs(l[x],k)+dfs(r[x],lef-k)); 
	}
	f[x][lef]=ans;
	return ans;
}
int main(){
	cin>>t;
	read(1);
	cout<<dfs(1,t-1);
	return 0;
}
2023/2/19 17:25
加载中...