HDU-1565方格取数(1)WA求调
查看原帖
HDU-1565方格取数(1)WA求调
943498
wangshenluogu楼主2025/2/6 09:56
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,mp[21][21],ztzc[20000],dp[20][20000],cnt=0,zc,ans=-1;
int main(){
    while(cin>>n){
    	cnt=0,ans=-1;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                cin>>mp[i][j];
            }
        }
        memset(dp,0,sizeof(dp));
        memset(ztzc,0,sizeof(ztzc));
		for(int x=0;x<(1<<n);x++){
            if(((x<<1)&x)==0){
                ztzc[++cnt]=x;
            }
        }
        for(int i=1;i<=n;i++){
            for(int zt=1;zt<=cnt;zt++){
                zc=0;
                int ztzc1=ztzc[zt];
                for(int mj=1;mj<=n;mj++){
                    if(ztzc1&1){
                    	zc+=mp[i][n-mj+1];
					}
					ztzc1=ztzc1>>1;
                }
                for(int zts=1;zts<=cnt;zts++){
                    if((ztzc[zts]&ztzc[zt])==0){
                        dp[i][zt]=max(dp[i][zt],dp[i-1][zts]+zc);
                        ans=max(ans,dp[i][zt]);
                    }
                }
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

样例已过。

本帖禁止无意义回复,请提供有效帮助。

2025/2/6 09:56
加载中...