#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;
}
样例已过。
本帖禁止无意义回复,请提供有效帮助。