rt。
#include<iostream>
#include<vector>
#define lid (id << 1)
#define rid (id << 1 | 1)
#define int long long
using namespace std;
int tme,cur = 1;
int dp[1005][7005],c[1005],w[1005];
vector< int > g[200005];
void input(){
int C,W;
cin >> C >> W;
#define pb push_back
c[cur] = C,w[cur] = W;
if(W) return ;
int rot = cur;
++cur;
g[rot].pb(cur);
input();
++cur;
g[rot].pb(cur);
input();
}
int dfs(int id,int left){
if(dp[id][left] > 0 || left == 0)return dp[id][left];
if(w[id]) return dp[id][left] = max(min(w[id],(left - c[id]) / 5),0ll);
for(int i = 0;i <= left - c[id];++i){
dp[id][left] = max( dp[id][left] , dfs(g[id][0],i) + dfs(g[id][1],left - c[id] - i) );
}
return dp[id][left];
}
signed main(){
cin >> tme;--tme;
input();
cout << dfs(1,tme);
return 0;
}
不懂哪里出问题了。