#include<bits/stdc++.h>
using namespace std;
int n,m,a[350]={0},b[120]={0},d[41][41][41][41],p[5]={0};
int main()
{
memset(d,0,sizeof(d));
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=1;i<=m;i++)
{
cin>>b[i];
p[b[i]]++;
}
cout<<d[0][0][0][0]<<endl;
for(int l=0;l<=p[1];l++)
{
for(int k=0;k<=p[2];k++)
{
for(int j=0;j<=p[3];j++)
{
for(int i=0;i<=p[4];i++)
{
if(i>0)d[l][k][j][i]=max(d[l][k][j][i-1],d[l][k][j][i]);
if(j>0)d[l][k][j][i]=max(d[l][k][j-1][i],d[l][k][j][i]);
if(k>0)d[l][k][j][i]=max(d[l][k][j][i],d[l][k-1][j][i]);
if(l>0)d[l][k][j][i]=max(d[l][k][j][i],d[l-1][k][j][i]);
if(l==0&&k==0&&j==0&&i==0) cout<<d[l][k][j][i]<<endl;
if(l==0&&k==0&&j==0&&i==0) cout<<a[i*4+j*3+k*2+l]<<endl;
d[l][k][j][i]+=a[i*4+j*3+k*2+l];
if(l==0&&k==0&&j==0&&i==0) cout<<d[l][k][j][i]<<endl;
//printf("%d %d %d %d %d\n",i,j,k,l,dp[i][j][k][l]);
}
}
}
}
return 0;
}
以上这份代码,经测试,d[0][0][0][0]的值总是赋成3
而
d[41][41][41][41]={0}
这份代码依然有此问题
但是
d[41][41][41][41]={{{{1}}}}
只要花括号里不为零,d[0][0][0][0]就会被赋值成0
到底为啥啊