AcWing 312. 乌龟棋
原题链接
简单
作者:
qgc123
,
2021-11-25 20:51:02
,
所有人可见
,
阅读 192
#include<bits/stdc++.h>
using namespace std;
const int N = 350, M = 41;
int f[M][M][M][M];
int a[N], b[5];
int main(){
int n, m;
cin >> n >> m;
for(int i = 0; i < n; i++)cin >> a[i];
for(int i = 1; i <= m; i++){
int c;
cin >> c;
b[c]++;
}
for(int A = 0; A <= b[1]; A++){
for(int B = 0; B <= b[2]; B++){
for(int C = 0; C <= b[3]; C++){
for(int D = 0; D <= b[4]; D++){
int t = a[A + B*2 + C*3 + D*4];
int &v = f[A][B][C][D];
v = t;
if(A) v = max(v, f[A - 1][B][C][D] + t);
if(B) v = max(v, f[A][B - 1][C][D] + t);
if(C) v = max(v, f[A][B][C - 1][D] + t);
if(D) v = max(v, f[A][B][C][D - 1] + t);
}
}
}
}
cout << f[b[1]][b[2]][b[3]][b[4]];
}