AcWing 312. 乌龟棋
原题链接
简单
作者:
ZTEG
,
2020-08-10 08:48:16
,
所有人可见
,
阅读 1270
#include<bits/stdc++.h>
using namespace std;
int ls[355];
int t[5];
int s[41][41][41][41];
int main()
{
int n,m;
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&ls[i]);
int a;
for(int i=1;i<=m;i++){
scanf("%d",&a);
t[a]++;
}
s[0][0][0][0]=ls[1];
for(int i=0;i<=t[1];i++)
for(int j=0;j<=t[2];j++)
for(int k=0;k<=t[3];k++)
for(int l=0;l<=t[4];l++){
int r=1+i+j*2+k*3+l*4;
if(i!=0)
s[i][j][k][l]=max(s[i][j][k][l],s[i-1][j][k][l]+ls[r]);
if(j!=0)
s[i][j][k][l]=max(s[i][j][k][l],s[i][j-1][k][l]+ls[r]);
if(k!=0)
s[i][j][k][l]=max(s[i][j][k][l],s[i][j][k-1][l]+ls[r]);
if(l!=0)
s[i][j][k][l]=max(s[i][j][k][l],s[i][j][k][l-1]+ls[r]);
}
printf("%d",s[t[1]][t[2]][t[3]][t[4]]);
return 0;
}