题目链接:点击查看

题目大意:给出 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)相关推荐

  1. 2021牛客多校5 - Double Strings(dp+组合数学)

    题目链接:点击查看 题目大意:给出两个字符串 sss 和 ttt,要求 "一段相同的前缀" + "一个不同的字符(满足s[i]<t[j])"+ " ...

  2. 牛客多校10 - Identical Trees(dp+二分图最小权匹配)

    题目链接:点击查看 题目大意:给出两个同构树 tree1 和 tree2 ,问最少需要改变多少个结点的标号,可以使得这两棵树相同 题目分析:直接 dfs 维护 dp 就好了,dp[ i ][ j ] ...

  3. python字符串去重及排序 牛客_2018牛客多校第一场 D.Two Graphs

    题意: n个点,m1条边的图E1,n个点,m2条边的图E2.求图E2有多少子图跟图E1同构. 题解: 用STL的全排列函数next_permutation()枚举映射.对于每一种映射枚举每一条边判断合 ...

  4. 牛客多校三 B Black and white

    牛客多校三 B Black and white 在n*m的棋盘上,每个格子有一个数,初始可以选一定的格子标记为黑色,在任意四个形如(i1, j1)(i1, j2)(i2, j1)(i2, j2)的格子 ...

  5. 2019牛客多校第一场

    2019牛客多校第一场 题号 题目 知识点 A Monotonic Matrix B Symmetric Matrix C Fluorescent 2 D Two Graphs E Removal F ...

  6. LCS(2021牛客多校4)

    LCS(2021牛客多校4) 题意: 让你构造三个字符串s1,s2,s3,长度均为n,要求LCS(s1,s2)=a,LCS(s2,s3)=b,LCS(s1,s3)=c 题解: 先考虑三个串互相LCS为 ...

  7. 24dian(牛客多校第三场)

    24dian(牛客多校第三场) 题意: 给你n张牌,每张牌的大小为1 ~ 13,问这些牌与加减乘除任意组合(可以使用括号),且但所有的有效解在计算过程中都涉及到分数,即非整数,能否组成答案m,如果可以 ...

  8. 2018年牛客多校算法寒假训练营练习比赛(第一场)C. 六子冲

    2018年牛客多校算法寒假训练营练习比赛(第一场)C. 六子冲 题目链接 做法:模拟即可 #include <bits/stdc++.h> #define P pair<int,in ...

  9. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

最新文章

  1. 分享6 个值得收藏的 Python 代码
  2. VC2019 使用GDI+ 显示PNG图片
  3. python3入门与进阶笔记_我的Python3萌新入门笔记
  4. ASP.NET MVC Unobtrusive JavaScript 实现 onfocusout 验证, onfocusin 清除错误
  5. linux卸载docker redis,【Docker】Redis在docker上的安装、启动、停止、删除操作
  6. 经理和下属谁更需要去了解业务
  7. mysql读写分离的含义_mysql的读写分离问题剖析
  8. 设计模式(4)—— 简单工厂模式(Simple Factory,创建型)
  9. 如何理解有符号数和无符号数!
  10. DVWA安装教程(懂你的不懂·详细)
  11. 小孔子内容管理系统V2.0正式开源发布
  12. python开发本地WEB项目
  13. DeferredShading
  14. 弱口令介绍及破解方式
  15. 知名网站的 404 页面长啥样?最后一个我惊呆了!
  16. 单键带定时雾化补水仪-DLT8P65SA
  17. 应用案例 | 2011款保时捷卡宴3.0T车发动机怠速间歇性抖动
  18. qq绑定outlook邮箱服务器,Outlook2013怎么绑定QQ邮箱
  19. get请求获取不到参数
  20. 如何给模型加入先验知识?

热门文章

  1. html同时执行多个ajax,Ajax方法详解以及多个Ajax并发执行
  2. php获取当前整点时间_8.PHP的日期和时间
  3. CORS 跨域-同源
  4. seata的部署和集成
  5. 使用线程池有以下几个目的
  6. 将本地镜像发布到阿里云
  7. Netty 总结与面试答疑
  8. 自动装配有哪些局限性?
  9. 分布式文件系统研究-fastDSF文件上传和下载流程
  10. flume高可用-balance-配置文件编写