You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
932 B
C++
30 lines
932 B
C++
#include <cstdio>
|
|
inline int max(int a,int b)
|
|
{
|
|
return a>b?a:b;
|
|
}
|
|
int n,m,a[360],cnt[4],f[40][40][40][40];
|
|
int main()
|
|
{
|
|
scanf("%d%d",&n,&m);
|
|
for(int i=0; i<n; i++) scanf("%d",&a[i]);
|
|
for(int i=0,x; i<m; i++)
|
|
{
|
|
scanf("%d",&x);
|
|
cnt[x-1]++;
|
|
}
|
|
for(int i=0; i<=cnt[0]; i++)
|
|
for(int j=0; j<=cnt[1]; j++)
|
|
for(int k=0; k<=cnt[2]; k++)
|
|
for(int l=0; l<=cnt[3]; l++)
|
|
{
|
|
if(i) f[i][j][k][l]=max(f[i][j][k][l],f[i-1][j][k][l]);
|
|
if(j) f[i][j][k][l]=max(f[i][j][k][l],f[i][j-1][k][l]);
|
|
if(k) f[i][j][k][l]=max(f[i][j][k][l],f[i][j][k-1][l]);
|
|
if(l) f[i][j][k][l]=max(f[i][j][k][l],f[i][j][k][l-1]);
|
|
f[i][j][k][l]+=a[i+j+j+k+k+k+l+l+l+l];
|
|
}
|
|
printf("%d",f[cnt[0]][cnt[1]][cnt[2]][cnt[3]]);
|
|
return 0;
|
|
}
|