NOIP2010-S-2-乌龟棋(已解决)

#include<bits/stdc++.h>
using namespace std;
int dp[41][41][41][41],n,m,x,a[351],b[5];
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int j=1;j<=m;j++){
        cin>>x;
        b[x]++;
    }
    int a1=b[1],a2=b[2],a3=b[3],a4=b[4];
    for(int i=0;i<=a1;i++)
        for(int j=0;j<=a2;j++)
            for(int k=0;k<=a3;k++)
                for(int l=0;l<=a4;l++){
                    x=i+j*2+k*3+l*4+1;
                    if(i>=1&&j>=1&&k>=1&&l>=1){
                        
                        dp[i][j][k][l]=a[x]+max(max(dp[i][j][k][l-1],dp[i][j][k-1][l]),max(dp[i][j-1][k][l],dp[i-1][j][k][l]));
                        //cout<<i<<" "<<j<<" "<<k<<" "<<l<<" "<<dp[i][j][k][l]<<endl;
                    }
                    else{
                        dp[i][j][k][l]=a[x];
                        //cout<<i<<" "<<j<<" "<<k<<" "<<l<<" "<<dp[i][j][k][l]<<endl;
                    }
                }
    cout<<dp[a1][a2][a3][a4];
}

送解决来了.



WA0分

1 个赞

我又调AC了,此贴结。

1 个赞