玄关求条
查看原帖
玄关求条
749280
xiaomo8125楼主2024/11/27 15:34
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int h[105],f[105][10005],root=1,cnt=1,time1,size[10000],ans=-1;
vector<int>son[1000];
void in(int p){
	
	int x,y;
	cin>>x>>y;
	//cout<<p<<endl;
	//printf("%d %d %d \n",p,x,y);
	if(y==0){
		int zz=++cnt;;
		in(zz);
		son[p].push_back(zz);
		int yy=++cnt;
		in(yy);
		son[p].push_back(yy);
		h[p]=x*2;
	}
	else{
		h[p]=x*2;
		//cout<<cnt;
		for(int i=1;i<=y;i++){
			
			son[p].push_back(++cnt);
			//cout<<cnt;
			h[cnt]=5;
		}
	}
}
void dp(int p){
	//cout<<p<<endl;
	if(son[p].size()==0){
		f[p][5]=1;
		//printf("%d %d %d\n",p,5,f[p][5]);
		size[p]=5;
	}
	for(int i=0;i<son[p].size();i++){
		int ss=son[p][i];
		dp(ss);
		size[p]+=size[ss]+h[ss];
		for(int j=min(time1,size[p]);j>=h[ss];j--){
			for(int k=0;k<=min(j-h[ss],size[ss]);k++){
				f[p][j]=max(f[p][j],f[p][j-k-h[ss]]+f[ss][k]);
				//printf("%d %d %d %d %d\n",p,j,k,f[p][j],f[ss][k]);
			}
		}
	}
}
int main(){
	cin>>time1;
	in(cnt);
//	for(int i=1;i<=cnt;i++){
//		cout<<i<<": ";
//		for(int j=0;j<son[i].size();j++){
//			cout<<son[i][j]<<":"<<h[son[i][j]]<<"  ";
//		}
//		cout<<endl;
//	}
	dp(1);
	for(int i=1;i<=time1;i++)ans=max(ans,f[1][i]);//cout<<f[1][i]<<" ";
	cout<<ans;
	return 0;
}
2024/11/27 15:34
加载中...