终于想出思路了,快打出来 然后。。
#include<bits/stdc++.h>
int n,m;
int a[400],b[10];
int dp[50][50][50][50];
int main()
{
memset(b,0,sizeof(b));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=m;i++){
int x;scanf("%d",&x);
b[x]++;
}
dp[0][0][0][0]=a[1];
int a1=b[1],b1=b[2],c1=b[3],d1=b[4];
int aa=0,bb=0,cc=0,dd=0;
for(int i=1;i<=b[1];i++)
for(int j=1;j<=b[2];j++)
for(int k=1;k<=b[3];k++)
for(int z=1;z<=b[4];z++){
if(a1!=0) dp[++aa][bb][cc][dd]=max(dp[aa][bb][cc][dd],dp[aa-1][bb][cc][dd]+a[aa+bb*2+cc*3+dd*4]) ,a1--;
if(b1!=0) dp[aa][++bb][cc][dd]=max(dp[aa][bb][cc][dd],dp[aa][bb-1][cc][dd]+a[aa+bb*2+cc*3+dd*4]) ,b1--;
if(c1!=0) dp[aa][bb][++cc][dd]=max(dp[aa][bb][cc][dd],dp[aa][bb][cc-1][dd]+a[aa+bb*2+cc*3+dd*4]) ,c1--;
if(d1!=0) dp[aa][bb][cc][++dd]=max(dp[aa][bb][cc][dd],dp[aa][bb][cc][dd-1]+a[aa+bb*2+cc*3+dd*4]) ,d1--;
}
printf("%d",dp[b[1]][b[2]][b[3]][b[4]]);
return 0;
}
然后。。。。它跟我说“max没有定义??” [NOIP2010 提高组] 乌龟棋.cpp [Error] 'max' was not declared in this scope
不是头文件的原因,我已经改过试了。
谢谢大佬帮我答疑解惑(跪)