牛客多校3 - Two Matchings(dp)
题目链接:点击查看
题目大意:给出 n 个点( n 为偶数 ),题目需要求出两个完全没有交集的匹配 q 和 p ,一方面使得 n 个点两两互相匹配,另一方面使得匹配的权值和最小
题目分析:一道 dp 题,比赛时贪心WA了一下午,就比较自闭了
因为 n 是偶数,所以可以考虑将 n 个数分配到不同的长度为偶数的环中,对于排列 q 和排列 p,只需要在偶环中交换一下位置就好了
但这个偶环的长度必须要大于 2 ,因为如果长度为 2 的话,那么无法保证两个匹配 q 和 p 不存在交集
还有一个需要观察或者猜出的结论就是,任意长度大于等于 8 的偶环,都可以分解为长度为 4 和长度为 6 的偶环,且总边权更小
那么现在就对于长度为 4 和长度为 6 的偶环计算一下贪心可以获得的最小边权之和是多少吧,直接上图:
这样总结一下,对于长度为 x 的偶环( x = 4 或 x = 6 ),贪心可以得到的最小权值和为 2 * ( a[ i ] - a[ i - x ] ) ,注意 a 数组是排序后的数组
这样我们直接进行动态规划就好了
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=2e5+100;int a[N];LL dp[N];int main()
{
#ifndef ONLINE_JUDGE
// freopen("data.in.txt","r",stdin);
// freopen("data.out.txt","w",stdout);
#endif
// ios::sync_with_stdio(false);int w;cin>>w;while(w--){int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",a+i);sort(a+1,a+1+n);dp[0]=0;dp[2]=inf;dp[4]=a[4]-a[1];for(int i=6;i<=n;i+=2)dp[i]=min(dp[i-4]+a[i]-a[i-3],dp[i-6]+a[i]-a[i-5]);printf("%lld\n",2*dp[n]);}return 0;
}
牛客多校3 - Two Matchings(dp)相关推荐
- 2021牛客多校5 - Double Strings(dp+组合数学)
题目链接:点击查看 题目大意:给出两个字符串 sss 和 ttt,要求 "一段相同的前缀" + "一个不同的字符(满足s[i]<t[j])"+ " ...
- 牛客多校10 - Identical Trees(dp+二分图最小权匹配)
题目链接:点击查看 题目大意:给出两个同构树 tree1 和 tree2 ,问最少需要改变多少个结点的标号,可以使得这两棵树相同 题目分析:直接 dfs 维护 dp 就好了,dp[ i ][ j ] ...
- python字符串去重及排序 牛客_2018牛客多校第一场 D.Two Graphs
题意: n个点,m1条边的图E1,n个点,m2条边的图E2.求图E2有多少子图跟图E1同构. 题解: 用STL的全排列函数next_permutation()枚举映射.对于每一种映射枚举每一条边判断合 ...
- 牛客多校三 B Black and white
牛客多校三 B Black and white 在n*m的棋盘上,每个格子有一个数,初始可以选一定的格子标记为黑色,在任意四个形如(i1, j1)(i1, j2)(i2, j1)(i2, j2)的格子 ...
- 2019牛客多校第一场
2019牛客多校第一场 题号 题目 知识点 A Monotonic Matrix B Symmetric Matrix C Fluorescent 2 D Two Graphs E Removal F ...
- LCS(2021牛客多校4)
LCS(2021牛客多校4) 题意: 让你构造三个字符串s1,s2,s3,长度均为n,要求LCS(s1,s2)=a,LCS(s2,s3)=b,LCS(s1,s3)=c 题解: 先考虑三个串互相LCS为 ...
- 24dian(牛客多校第三场)
24dian(牛客多校第三场) 题意: 给你n张牌,每张牌的大小为1 ~ 13,问这些牌与加减乘除任意组合(可以使用括号),且但所有的有效解在计算过程中都涉及到分数,即非整数,能否组成答案m,如果可以 ...
- 2018年牛客多校算法寒假训练营练习比赛(第一场)C. 六子冲
2018年牛客多校算法寒假训练营练习比赛(第一场)C. 六子冲 题目链接 做法:模拟即可 #include <bits/stdc++.h> #define P pair<int,in ...
- 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数
目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...
最新文章
- 分享6 个值得收藏的 Python 代码
- VC2019 使用GDI+ 显示PNG图片
- python3入门与进阶笔记_我的Python3萌新入门笔记
- ASP.NET MVC Unobtrusive JavaScript 实现 onfocusout 验证, onfocusin 清除错误
- linux卸载docker redis,【Docker】Redis在docker上的安装、启动、停止、删除操作
- 经理和下属谁更需要去了解业务
- mysql读写分离的含义_mysql的读写分离问题剖析
- 设计模式(4)—— 简单工厂模式(Simple Factory,创建型)
- 如何理解有符号数和无符号数!
- DVWA安装教程(懂你的不懂·详细)
- 小孔子内容管理系统V2.0正式开源发布
- python开发本地WEB项目
- DeferredShading
- 弱口令介绍及破解方式
- 知名网站的 404 页面长啥样?最后一个我惊呆了!
- 单键带定时雾化补水仪-DLT8P65SA
- 应用案例 | 2011款保时捷卡宴3.0T车发动机怠速间歇性抖动
- qq绑定outlook邮箱服务器,Outlook2013怎么绑定QQ邮箱
- get请求获取不到参数
- 如何给模型加入先验知识?