#include<bits/stdc++.h>
#define rep(i,j,k) for(register int i(j);i!=(k+1);++i)
#define drp(i,j,k) for(register int i(j);i>=k;--i)
using namespace std;
const int N=3007;
inline void read(int &x) {
x=0;
register char ch=getchar();
int w=0;
while(ch>'9'||ch<'0') {
w|=ch=='-';
ch=getchar();
}
while(ch>='0'&&ch<='9') {
x=(x<<1)+(x<<3)+(ch&15);
ch=getchar();
}
w?x=~(x-1):x;
}
int n;
int val[N][N],cost[N][N];
int f[N][N],a[N],b[N];
inline void dfs(int x) {
int cost,num;
read(cost);read(num);
cost*=2;
if(num) {
rep(i,1,num) read(a[i]),read(b[i]);
rep(i,1,num)
drp(j,n,cost+b[i])
f[x][j]=max(f[x][j-b[i]]+a[i],f[x][j]);//01背包
}
else {
dfs(x<<1);
dfs(x<<1|1);
drp(i,n,cost)
rep(j,0,i-cost)
f[x][i]=max(f[x][i],f[x<<1][j]+f[x<<1|1][i-j-cost]);
}
}
int main() {
// freopen("steal.in","r",stdin);
// freopen("steal.out","w",stdout);
read(n);
n--;
dfs(1);
cout<<f[1][n];
return 0;
}
dfs中的else 的外重循环i 是枚举父亲的耗时 如果是读完再dp 就是枚举物品 why