作业之考试n

    xiaoxiao2025-02-08  57

    知道用动规,可是用一维数组表示不起,就改成深搜了。考完后上网没想到要用四维数组。 z,y,k,x为四张卡片的数量把ha[z][y][k][x]与ha[z-1][y][k][x],ha[z][y-1][k][x],ha[z][y][k-1][x],ha[z][y][k][x-1]比较再加上地图值

    #include<bits/stdc++.h> using namespace std; int k,m,n,ha[41][41][41][41],q[1000],kao[1000]; using namespace std; int main(){ scanf("%d%d",&n,&m); for(int z=0;z<n;++z) scanf("%d",&q[z]); for(int z=1;z<=m;++z){ int a; scanf("%d",&a); ++kao[a]; } for(int z=0;z<=kao[1];++z) for(int y=0;y<=kao[2];++y) for(int k=0;k<=kao[3];++k) for(int x=0;x<=kao[4];++x){ if(z)ha[z][y][k][x]=max(ha[z][y][k][x],ha[z-1][y][k][x]); if(y)ha[z][y][k][x]=max(ha[z][y][k][x],ha[z][y-1][k][x]); if(k)ha[z][y][k][x]=max(ha[z][y][k][x],ha[z][y][k-1][x]); if(x)ha[z][y][k][x]=max(ha[z][y][k][x],ha[z][y][k][x-1]); ha[z][y][k][x]+=q[z+y*2+k*3+x*4]; } printf("%d",ha[kao[1]][kao[2]][kao[3]][kao[4]]); return 0; }
    最新回复(0)