Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
51502 | alex_liu | 最优子图 | C++ | 运行超时 | 30 | 2000 MS | 2576 KB | 1016 | 2022-07-13 11:47:31 |
#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; }