这是一道dp问题
我们先使用f【】【】【】【】来表示四张卡片的状态
然后枚举四张卡片的数量寻找最优解
JAVA代码如下:
import java.util.*;
class Main{
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
int n=in.nextInt();
int m=in.nextInt();
int b[]=new int [5];
int w[]=new int [n];
for(int i=0;i<n;i) {
w[i]=in.nextInt();
}
for(int i=0;i<m;i) {
int x=in.nextInt();
b[x]++;
}
int f[][][][]=new int [b[1]+1][b[2]+1][b[3]+1][b[4]+1];
f[0][0][0][0]=w[0];
for(int i=0;i<=b[1];i++) {
for(int j=0;j<=b[2];j++) {
for(int k=0;k<=b[3];k++) {
for(int l=0;l<=b[4];l++) {
int score=w[i*1+j*2+k*3+l*4];
int v=f[i][j][k][l];
v=score;
if(i>0) {
v=Math.max(v, f[i-1][j][k][l]+score);
f[i][j][k][l]=v;
}
if(j>0) {
v=Math.max(v, f[i][j-1][k][l]+score);
f[i][j][k][l]=v;
}
if(k>0) {
v=Math.max(v, f[i][j][k-1][l]+score);
f[i][j][k][l]=v;
}
if(l>0) {
v=Math.max(v, f[i][j][k][l-1]+score);
f[i][j][k][l]=v;
}
}
}
}
}
System.out.println(f[b[1]][b[2]][b[3]][b[4]]);
}
}