首页 > 其他分享 >AtCoder Beginner Contest 318 - D(状压 dp)

AtCoder Beginner Contest 318 - D(状压 dp)

时间:2023-09-07 20:58:29浏览次数:44  
标签:AtCoder 318 Beginner int 状压 ++ vector 顶点 dp

目录

D - General Weighted Max Matching

题意
给定无向图,边有边权。让你选择一组边,满足任意两边不相交且总边权和最大。
顶点数 $\le 16 $

思路
状压 DP 求解该问题
状态:利用 n 位二进制表示每个顶点是否已经被选择,0 表示该顶点未选,1 表示当前顶点已选
转移:每一个二进制数表示的状态可以通过加入新的边进行转移

边是否选择与点是否选择等价,且我们不关心之前怎么选的边,只关心新加边如何转移,以及之前加的边对于答案的影响

代码

void solve(){
	int n;
	cin >> n;
	vector d(n, vector<int>(n, 0));
	for(int i = 0; i < n; ++ i){
		for(int j = i + 1; j < n; ++ j){
			cin >> d[i][j];
		}
	}
	vector<ll> dp(1 << n, 0);
	ll ans = 0;
	for(int i = 0; i < (1 << n); ++ i){
		for(int j = 0; j < n; ++ j){
			if(!(i >> j & 1)){
				for(int k = j + 1; k < n; ++ k){
					if(!(i >> k & 1)){
						int t = i | (1 << j) | (1 << k);
						dp[t] = max(dp[t], dp[i] + d[j][k]);
					}
				}
			}
		}
		ans = max(ans, dp[i]);
	}
	cout << ans << '\n';
	return ;
}

标签:AtCoder,318,Beginner,int,状压,++,vector,顶点,dp
From: https://www.cnblogs.com/Qiansui/p/17685970.html

相关文章

  • [题解] AtCoder Beginner Contest 308 A~G
    AtCoderBeginnerContest308A~GA.NewSchemevoidMain(){vector<i64>a(8);for(auto&x:a)cin>>x;if(!is_sorted(a.begin(),a.end())&&!all_of(a.begin(),a.end(),[](auto&x){returnx%25!=0||!(100......
  • 【题解】ABC318
    AtCoder-ABC318AFullMoon暴力枚举判断。提交记录:Submission-AtCoderAtCoder-ABC318BOverlappingSheets暴力枚举判断。提交记录:Submission-AtCoderAtCoder-ABC318CBlueSpring使用通票一定是用在最大的\(kd\)天,排序后枚举\(k\)即可。提交记录:Submission-AtC......
  • AT318 A-G 题解
    A枚举\(1\simn\)的每个数,判断是否有\(i-M\equiv0\pmodP\)即可。赛时代码B暴力覆盖即可,注意\(x,y\)均是左开右闭。赛时代码C贪心的想,如果要替换\(i\)项,那必然是替换最大的\(i\)项,因此只需要对\(f\)排序,预处理后缀和后再扫一遍取替换前\(i\)项的最小值即可......
  • [ABC318G] Typical Path Problem 题解
    题意给定一个\(N\)个节点和\(M\)条边组成的简单无向联通图,给定三个节点\(A,B,C\),求是否存在一条简单路径满足\(A\rightarrowB\rightarrowC\)。(\(3\leN,M\le2\times10^5\))。题解因为简单路径要求每个节点至多经过一次,故不存在合法的简单路径当且仅当存在一个......
  • ABC318_E
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineendl'\n'intn,a[300010],c[300010],t[300010],s;signedmain(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;for(intx,i=1;i<=n;i++){......
  • abc318
    A-FullMoonhttps://atcoder.jp/contests/abc318/tasks/abc318_aProblemStatementTakahashilikesfullmoons.Lettodaybeday1.ThefirstdayonoraftertodayonwhichhecanseeafullmoonisdayM.Afterthat,hecanseeafullmooneveryPdays,......
  • [ABC318D] General Weighted Max Matching 题解
    [ABC318D]GeneralWeightedMaxMatching题解题意  给定无向有权完全图,求最大权匹配。思路分析  注意到\(n\le16\),我考虑状压DP。  设当前点集\(S\)中最大权匹配的答案是\(f_S\),我们考虑\(S\)中“最后”一个点\(p\)(这里的“最后”一个点是指,在状压表示状态......
  • [ABC318E] Sandwiches 题解
    题意给定一个长度为\(N\)的正整数列\(A=\left(A_1,A_2,\cdots,A_N\right)\),求满足以下条件的正整数三元组\(\left(i,j,k\right)\)的数量:\(1\lei<j<k\leN\);\(A_i=A_k\);\(A_i\neqA_j\)。数据范围:\(3\leN\le3\times10^5\);\(1\leA_i......
  • ABC318G Typical Path Problem
    给定无向连通图,问是否存在一条从\(A\)到\(C\)经过\(B\)的简单路径。\(n\le3\times10^5\)。怎么这个G这么简单我还没写完啊?怎么这个G这么简单我还没写完啊?怎么这个G这么简单我还没写完啊?怎么这个G这么简单我还没写完啊?怎么这个G这么简单我还没写完啊?怎么这......
  • 【题解】AtCoder Beginner Contest 318(D - Ex)
    赛时过了A-G,Ex仿佛猜到了结论但是完全不懂多项式科技,就炸了。大家好像都秒了A,B,C就不写了。D.GeneralWeightedMaxMatching题目描述:给你一个加权无向完全图,图中有\(N\)个顶点,编号从\(1\)到\(N\)。连接顶点\(i\)和\(j\)的\((i<j)\)的权重为\(D_{i,j}\)。在......