90分求调
#include <bits/stdc++.h>
using namespace std;
int n,m,s[109],f[9];
int dp[109][109][109][109];
int summ(int a,int b,int c,int d)
{
return 1+a+b*2+c*3+d*4;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>s[i];
for(int i=1;i<=m;i++)
{
int g;
cin>>g;
f[g]++;
}
//for(int i=1;i<=4;i++) cout<<f[i]<<' '<<endl;
dp[0][0][0][0]=s[1];
for(int a=0;a<=f[1];a++)
{
for(int b=0;b<=f[2];b++)
{
for(int c=0;c<=f[3];c++)
{
for(int d=0;d<=f[4];d++)
{
int r=summ(a,b,c,d);
if(a!=0) dp[a][b][c][d]=max(dp[a][b][c][d],dp[a-1][b][c][d]+s[r]);
if(b!=0) dp[a][b][c][d]=max(dp[a][b][c][d],dp[a][b-1][c][d]+s[r]);
if(c!=0) dp[a][b][c][d]=max(dp[a][b][c][d],dp[a][b][c-1][d]+s[r]);
if(d!=0) dp[a][b][c][d]=max(dp[a][b][c][d],dp[a][b][c][d-1]+s[r]);
}
}
}
}
/*for(int a=0;a<=f[1];a++)
{
for(int b=0;b<=f[2];b++)
{
for(int c=0;c<=f[3];c++)
{
for(int d=0;d<=f[4];d++)
{
cout<<a<<' '<<b<<' '<<c<<' '<<d<<' '<<dp[a][b][c][d]<<endl;
}
}
}
}*/
cout<<dp[f[1]][f[2]][f[3]][f[4]];
return 0;
}