1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include<bits/stdc++.h> #define N 60 #define V 100010 #define max(a,b) ((a)>(b)?(a):(b)) #define fsb(a,b,c) for(register int a=b;a<=(c);a++) #define fbs(a,b,c) for(register int a=b;a>=(c);a--) using namespace std; int f[2][V],nw=1,lt=0,n,g,v,x,y,p,ans=0; template<typename qw>inline void rll(qw &x){ qw f=1;x=0;char c=getchar(); while(!isdigit(c))f=c=='-'?-1:f,c=getchar(); while(isdigit(c))x=x*10+c-'0',c=getchar(); x*=f; } int main(){ rll(n);rll(v);memset(f,0,sizeof(f)); fsb(i,1,n){ rll(p); fsb(i,p,v)f[nw][i]=f[lt][i-p]; rll(g); fsb(i,1,g){ rll(x);rll(y); fbs(i,v,p+x)f[nw][i]=max(f[nw][i],f[nw][i-x]+y); } fsb(i,0,v)f[nw][i]=max(f[nw][i],f[lt][i]); swap(lt,nw); } fsb(i,0,v)ans=max(ans,f[lt][i]); printf("%d\n",ans); return 0; }
|