提交时间:2022-07-13 11:53:40

运行 ID: 51577

#include <bits/stdc++.h> using namespace std; const int maxn=505; long long n,k,ans,y,b; long long w[maxn][maxn]; long long e[maxn][maxn]; bool f[maxn]; void dfs(int x) { if(x==n) { if(b==0 || y==0) return ; long long sum=0; for(int i=1; i<=2*n; ++i) { for(int j=i+1; j<=n*2; ++j) { if(f[i] && f[j]) { sum+=e[i][j]; } } } /*if(sum==139) { for(int i=1; i<=2*n; ++i) if(f[i]) printf("%d\n",i); }*/ ans=max(ans,sum); return ; } for(int i=1; i<=2*n; ++i) { if(!f[i]) { f[i]=1; (i>n?b++:y++); dfs(x+1); (i>n?b--:y--); f[i]=0; } } } int main() { // freopen("sub.in","r",stdin); //freopen("sub.out","w",stdout); scanf("%lld%lld",&n,&k); for(int i=1; i<=n; ++i) { for(int j=1; j<=n; ++j) { scanf("%lld",&e[i][j]); e[i+n][j+n]=e[i][j]; if(e[i][j]) e[i+n][j] = e[i][j+n] = k - e[i][j]; } } dfs(0); /*for(int i=1; i<=2*n; ++i) { for(int j=1; j<=2*n; ++j) { printf("%d ",e[i][j]); } printf("\n"); }*/ printf("%lld",ans); return 0; }