代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=45;
int n,m,x,a[355],cost[5],dp[maxn][maxn][maxn][maxn];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>x;
cost[x]++;
}
//dp[0][0][0][0]=a[1];
for(int i=0;i<=cost[1];i++){
for(int j=0;j<=cost[2];j++){
for(int k=0;k<=cost[3];k++){
for(int l=0;l<=cost[4];l++){
int t=1+i+2*j+3*k+4*l;
if(i!=0) dp[i][j][k][l]=max(dp[i][j][k][l],dp[i-1][j][k][l]+a[t]);
if(j!=0) dp[i][j][k][l]=max(dp[i][j][k][l],dp[i][j-1][k][l]+a[t]);
if(k!=0) dp[i][j][k][l]=max(dp[i][j][k][l],dp[i][j][k-1][l]+a[t]);
if(l!=0) dp[i][j][k][l]=max(dp[i][j][k][l],dp[i][j][k][l-1]+a[t]);
}
}
}
}
cout<<dp[cost[1]][cost[2]][cost[3]][cost[4]]<<endl;
return 0;
}
恳请各位神犇/大佬指点迷津