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
| const int MAX=350+10; int n,m,a[MAX],b,ans; int d[42][42][42][42],h[5]; int main(){ freopen("in","r",stdin); sf(n);sf(m); fi(i,0,n) sf(a[i]); fi(i,0,m){ sf(b); h[b]++; } mem(d,0); for(int i=h[1];i>=0;i--) for(int j=h[2];j>=0;j--) for(int k=h[3];k>=0;k--) for(int t=h[4];t>=0;t--){ int t1=0; if(i+1<=h[1]) t1= max(d[i+1][j][k][t],t1); if(j+1<=h[2]) t1= max(t1,d[i][j+1][k][t]); if(k+1<=h[3]) t1= max(d[i][j][k+1][t],t1); if(t+1<=h[4]) t1= max(t1,d[i][j][k][t+1]); d[i][j][k][t]=t1+a[i+j*2+k*3+t*4]; } pf(d[0][0][0][0]); return 0; }
|