rt,代码不开O2会TL
#include<bits/stdc++.h>
using namespace std;
int t;
int tim[205],w[205],dp[205][6005],son[2][205],cnt=1;
void read(int cu) {
int x,y;
scanf("%d%d",&x,&y);
tim[cu]=x<<1;
if(y!=0) {
w[cu]=y;
return;
}
read(son[0][cu]=++cnt);
read(son[1][cu]=++cnt);
}
void dfs(int cu) {
// cout<<cu<<" "<<tim[cu]<<" "<<w[cu]<<endl;
if(w[cu]!=0) {
for(int i=tim[cu]+5;i<t;++i) {
dp[cu][i]=min(w[cu],dp[cu][i-5]+1);
}
return;
}
dfs(son[0][cu]);
for(int i=tim[cu];i<t;++i)
dp[cu][i]=dp[son[0][cu]][i-tim[cu]];
dfs(son[1][cu]);
for(int i=t-1;i>tim[cu];--i) {
for(int j=0;j<i-tim[cu];++j) {
dp[cu][i]=max(dp[cu][i],dp[cu][i-j]+dp[son[1][cu]][j]);
}
}
return;
}
int main() {
scanf("%d",&t);
read(1);
dfs(1);
cout<<dp[1][t-1];
return 0;
}
事Track Lost (确信