80分,求调
查看原帖
80分,求调
535502
guoyucheng楼主2024/7/13 13:00
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int dp[N][N];
int times,tot,t[N],num[N];
vector<int>nbr[N];
int init()
{
	int cost,val,cur=++tot;
    cin>>cost>>val;
    t[cur]=cost*2;
    if(val==0)
	{
        int lc=init();
        nbr[cur].push_back(lc);
		int rc=init();
		nbr[cur].push_back(rc);
    }
    else
    	num[cur]=val;
    return cur;
}
void dfs(int cur) 
{
	if(num[cur]!=0) 
	{
		for(int i=t[cur];i<=times;i++)
			dp[cur][i]=min(num[cur],(i-t[cur])/5);
		return;
	} 
	for(int i=0;i<nbr[cur].size();i++)
	{
		int nxt=nbr[cur][i];
		dfs(nxt);
		for(int j=times;j>=t[cur];j--) 
			for(int k=0;k<=j-t[cur];k++)
				dp[cur][j]=max(dp[cur][j],dp[nxt][k]+dp[cur][j-k]);
	}
    return;
}
int main()
{
    cin>>times;
    times--;
    int root=init();
    dfs(root);
    cout<<dp[root][times];
    return 0;
}
2024/7/13 13:00
加载中...