百思不得其解
by zhangyuxing @ 2018-01-27 09:19:58
```cpp
#include<cstdio>
#include<algorithm>
using namespace std;
int a[10001],b[10001],dp[42][42][42][42];
int main()
{
int n,m,i,o,j,k,l,x,i1,j1,k1,l1;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)scanf("%d",&a[i]);
for(i=1;i<=m;++i)
{
scanf("%d",&o);
b[o]++;
}
for(i=0;i<=b[1];++i)
for(j=0;j<=b[2];++j)
for(k=0;k<=b[3];++k)
for(l=0;l<=b[4];++l)
{
if(!i&&!j&&!k&&!l)continue;
x=i+j*2+k*3+l*4+1;
if(i&&j&&k&&l)dp[i][j][k][l]=max(max(dp[i-1][j][k][l],dp[i][j-1][k][l]),max(dp[i][j][k-1][l],dp[i][j][k][l-1]))+a[x];
if(!i&&j&&k&&l)dp[i][j][k][l]=max(dp[i][j-1][k][l],max(dp[i][j][k-1][l],dp[i][j][k][l-1]))+a[x];
if(i&&!j&&k&&l)dp[i][j][k][l]=max(dp[i-1][j][k][l],max(dp[i][j][k-1][l],dp[i][j][k][l-1]))+a[x];
if(i&&j&&!k&&l)dp[i][j][k][l]=max(max(dp[i-1][j][k][l],dp[i][j-1][k][l]),dp[i][j][k][l-1])+a[x];
if(i&&j&&k&&!l)dp[i][j][k][l]=max(max(dp[i-1][j][k][l],dp[i][j-1][k][l]),dp[i][j][k-1][l])+a[x];
if(!i&&!j&&k&&l)dp[i][j][k][l]=max(dp[i][j][k-1][l],dp[i][j][k][l-1])+a[x];
if(!i&&j&&!k&&l)dp[i][j][k][l]=max(dp[i][j-1][k][l],dp[i][j][k][l-1])+a[x];
if(!i&&j&&k&&!l)dp[i][j][k][l]=max(dp[i][j-1][k][l],dp[i][j][k-1][l])+a[x];
if(i&&!j&&!k&&l)dp[i][j][k][l]=max(dp[i-1][j][k][l],dp[i][j][k][l-1])+a[x];
if(i&&!j&&k&&!l)dp[i][j][k][l]=max(dp[i-1][j][k][l],dp[i][j][k-1][l])+a[x];
if(i&&j&&!k&&!l)dp[i][j][k][l]=max(dp[i-1][j][k][l],dp[i][j-1][k][l])+a[x];
if(i&&!j&&!k&&!l)dp[i][j][k][l]=dp[i-1][j][k][l]+a[x];
if(!i&&j&&!k&&!l)dp[i][j][k][l]=dp[i][j-1][k][l]+a[x];
if(!i&&!j&&k&&!l)dp[i][j][k][l]=dp[i][j][k-1][l]+a[x];
if(!i&&!j&&!k&&l)dp[i][j][k][l]=dp[i][j][k][l-1]+a[x];
}
printf("%d",dp[b[1]][b[2]][b[3]][b[4]]+a[1]);
return 0;
}
```
by zhangyuxing @ 2018-01-27 09:49:34
删帖
by zhangyuxing @ 2018-01-27 09:49:54
已AC
by zhangyuxing @ 2018-01-27 09:50:09
为什么您如此暴力
by 圣地亚哥 @ 2018-06-04 11:14:36