https://www.luogu.com.cn/problem/P1541

题意:太长。。

4维DP

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;
}

...