AT_abc318_d 题解
AT_abc318_d General Weighted Max Matching 题解
Links
Description
有一张
Solution
搜索即可,重点在于复杂度分析。都先我们确定一件事:一定会选择
因此极限情况下要选
Codes
#include <bits/stdc++.h> using namespace std; #define max_n 121 #define int long long void read(int &p) { p = 0; int k = 1; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') { k = -1; } c = getchar(); } while (c >= '0' && c <= '9') { p = p * 10 + c - '0'; c = getchar(); } p *= k; return; } void write_(int x) { if (x < 0) { putchar('-'); x = -x; } if (x > 9) { write_(x / 10); } putchar(x % 10 + '0'); } void writesp(int x) { write_(x); putchar(' '); } void writeln(int x) { write_(x); puts(""); } int mp[20][20]; int cnt,n; int vis[max_n]; int ans = 0; struct Line { int u,v,w; }edge[max_n]; void dfs(int now,int res,int ls) { if(now + 2 > n) { ans = max(ans,res); return ; } for(int i = ls + 1;i <= cnt;i++) { int u = edge[i].u,v = edge[i].v,w = edge[i].w; if(vis[u] || vis[v]) { continue; } vis[u] = vis[v] = 1; dfs(now + 2,res + w,i); vis[u] = vis[v] = 0; } } signed main() { read(n); for(register int i = 1,w;i < n;i++) { for(register int j = i + 1;j <= n;++j) { read(w); edge[++cnt] = {i,j,w}; } } dfs(0,0,0); writeln(ans); return 0; }
本文来自博客园,作者:cn_ryh,转载请注明原文链接:https://www.cnblogs.com/yuhang-ren/p/17674530.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步