求助 80pts
查看原帖
求助 80pts
684962
LINTONG1楼主2023/11/6 20:39
#include<bits/stdc++.h>
using namespace std;
inline int read(){
    int s=0,w=1;
    char ch=getchar();
    while(ch>'9'||ch<'0'){
        if(ch=='-')w=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        s=(s<<3)+(s<<1)+ch-'0';
        ch=getchar();
    }
    return s*w;
}
int t,cnt;
int sum[1005],tim[1005];
int dp[1005][1006];
int ls[5005],rs[5005],tot=1;
void get(int x){
    tim[x]=read(),sum[x]=read();
    tim[x]<<=1;
    if(sum[x]==0){
        ls[x]=++tot;
        rs[x]=++tot;
        get(ls[x]);
        get(rs[x]);
    } 
}

void dfs(int x,int cost){
    if(dp[x][cost]||!cost)return;
    if(!sum[x]){
        for(int i=0;i<=cost-tim[x];i++){
            dfs(ls[x],i);
            dfs(rs[x],cost-tim[x]-i);
            dp[x][cost]=max(dp[x][cost],dp[ls[x]][i]+dp[rs[x]][cost-tim[x]-i]);
            
        }
    }
    else{
        dp[x][cost]=min(sum[x],(cost-tim[x])/5);
        return ;
    }
}
int main(){
    t=read();
    t--;
    get(1);
    dfs(1,t);
    cout<<dp[1][t];
}
  
2023/11/6 20:39
加载中...