提交时间:2022-07-13 11:47:31

运行 ID: 51502

#include<bits/stdc++.h> #define int long long using namespace std; inline int read(){ int x=0,f=1; char c=getchar(); while(!isdigit(c)){if(!(c^'-'))f=-1;c=getchar();} while(isdigit(c)){x=((x<<1)+(x<<3)+(c^48));c=getchar();} return x*f; } int n,k,maxx=-1,w[505][505]; namespace slove{ inline bool check(string s){ for(int i=1;i<s.size();i++)if(s[i]^s[0])return false; return true; } inline int get(string s,int ans){ for(int i=0;i<s.size();i++){ for(int j=0;j<s.size();j++)ans+=(s[i]==s[j])?w[i+1][j+1]:k-w[i+1][j+1]; } return ans; } inline void dfs(int d,string s){ if(d>n){ if(check(s))return; maxx=max(maxx,get(s,0)); } else dfs(d+1,s+'0'),dfs(d+1,s+'1'); } inline void slove1(){ cout<<(n*(n-1)>>1)<<endl; } inline void slove2(){ dfs(1,""); cout<<(maxx>>1)<<endl; } } signed main(){ n=read(),k=read(); for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)w[i][j]=read(); if(!(k^1))slove::slove1(); else slove::slove2(); return 0; }