```
#include<iostream>
#include<cstdio>
using namespace std;
#define N 610
struct edge
{
int next;
int to;
int w;
} e[N];
int head[N];
int dp[N][N];
int cnt,T;
int t,x,num,val,cost;
void add(int a,int b,int t){
e[++cnt].to=b;
e[cnt].next=head[a];
e[cnt].w=t*2;
head[a]=cnt;
}
void build(int fa){
num++;
int son=num;
cin>>t;
add(fa,son,t);
cin>>x;
if(x) {
for(int i=1;i<=x;i++){
cin>>val>>cost;
for(int j=T;j>=cost;j--)
dp[son][j]=max(dp[son][j],dp[son][j-cost]+val);
}
}
else {
build(son);
build(son);
}
return;
}
void dfs(int u){
int v;
for(int i=head[u];i;i=e[i].next){
v=e[i].to;
dfs(v);
for(int j=T;j>=e[i].w;j--)
for(int k=0;k<=j-e[i].w;k++)
dp[u][j]=max(dp[u][j],dp[u][k]+dp[v][j-e[i].w-k]);
}
return;
}
int main()
{
cin>>T;
T--;
build(0);
dfs(0);
cout<<dp[0][T];
return 0;
}
这个是下面的代码
```
by OI_lover @ 2018-10-03 12:30:23
有区别?
by 业余门槛 @ 2018-10-03 13:24:39