调了很久了,不知道哪里错了。
40分,样例输出0。
#include <iostream>
#include <cstdio>
using namespace std;
int n,t,w,f[1005][1005],cnt,v[1005],c[1005];
void read(int u) {
scanf("%d%d",&t,&w);
t<<=1;
if(w){
for(int i=1;i<=w;i++)
scanf("%d%d",&c[i],&v[i]);
for(int i=1;i<=w;i++)
for(int j=n;j>=v[i];j--)
if(j-v[i]>=t)
f[u][j]=max(f[u][j],f[u][j-v[i]]+c[i]);
return;
}
read(u<<1);
read(u<<1|1);
for(int i=t;i<=n;i++)
for(int j=0;j<=i-t;j++)
f[u][i]=max(f[u][i],f[u<<1][j]+f[u<<1|1][i-t-j]);
}
int main() {
scanf("%d",&n);
n--;
read(1);
printf("%d",f[1][n]);
return 0;
}