Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
51545 | xujindong | 最优子图 | C++ | 运行超时 | 30 | 2000 MS | 1564 KB | 1118 | 2022-07-13 11:51:56 |
#include<bits/stdc++.h> using namespace std; template<typename T>void in(T &a) { T ans=0; bool f=0; char c=getchar(); for(;c<'0'||c>'9';c=getchar())if(c=='-')f=1; for(;c>='0'&&c<='9';c=getchar())ans=ans*10+c-'0'; a=(f?-ans:ans); } template<typename T,typename... Args>void in(T &a,Args&...args) { in(a),in(args...); } int n,w[505][505],k; namespace solve{ void solve1(){ cout<<n*(n-1)/2<<'\n'; } int maxn=-1; bool check(string now){ for(int i=1;i<now.size();i++)if(now[i]!=now[0])return 0; return 1; } int sum(string now){ int ans=0; for(int i=0;i<now.size();i++)for(int j=0;j<i;j++)ans+=((now[i]==now[j])?(w[i+1][j+1]):(k-w[i+1][j+1])); return ans; } void dfs(int d,string now){ if(d>n){ if(check(now))return; maxn=max(maxn,sum(now)); return; } dfs(d+1,now+'0'),dfs(d+1,now+'1'); } void solve2(){ dfs(1,""),cout<<maxn<<'\n'; } } int main(){ in(n,k); for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)in(w[i][j]); if(k==1)solve::solve1(); else solve::solve2(); return 0; }