#include<bits/stdc++.h>
using namespace std;
int n,m,a[351],b[5],dp[351][40][40][40],inn;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=0;i<m;i++){
cin>>inn;
b[inn]++;
}
dp[1][0][0][0]=a[1];
for(int i=2;i<=n;i++){
for(int b1=0;b1<=b[1];b1++){
for(int b2=0;b2<=b[2];b2++){
for(int b3=0;b3<=b[3];b3++){
if((i-b1-b2*2-b3*3-1)%4!=0){
continue;
}
int b4=(i-b1-b2*2-b3*3-1)/4;
if(b4<0||b4>b[4]){
continue;
}
if(b1-1>=0&&i-1>=1){
dp[i][b1][b2][b3]=dp[i-1][b1-1][b2][b3]+a[i];
}
if(b2-1>=0&&i-2>=1){
dp[i][b1][b2][b3]=max(dp[i][b1][b2][b3],dp[i-2][b1][b2-1][b3]+a[i]);
}
if(b3-1>=0&&i-3>=1){
dp[i][b1][b2][b3]=max(dp[i][b1][b2][b3],dp[i-3][b1][b2][b3-1]+a[i]);
}
if(b4-1>=0&&i-4>=1){
dp[i][b1][b2][b3]=max(dp[i][b1][b2][b3],dp[i-4][b1][b2][b3]+a[i]);
}
}
}
}
}
cout<<dp[n][b[1]][b[2]][b[3]];
return 0;
}
在c++中,%优先级是先于+-*÷的。
使用时记得加括号!!!
因为这个调了好一会。。。