题目内容

这是一个简单的游戏,在一个\(n×n\)的矩阵中,找\(n\)个数使得这\(n\)个数都在不同的行和列里并且要求这\(n\)个数中的最大值和最小值的差值最小。

输入格式

输入一个整数\(T\),表示\(T\)组数据。

对于每组数据第一行输入一个正整数\(n(1\le n\le 100)\)表示矩阵的大小。

接着输入\(n\)行,每行\(n\)个数\(x(0\le x\le 100)\)。

输出格式

对于每组数据输出一个数表示最小差值。

样例输入

1

4

1 1 1 1

2 2 2 2

3 3 3 3

4 4 4 4

样例输出

3

思路

对于找出来的\(n\)个数,均属于区间\([l,r]\),那么答案就是\(r-l\)。所以枚举区间然后进行二分图匹配,让所有可能的匹配权值都属于这个区间即可。

二分图最大匹配+二分答案。

代码

  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cstring>
  4. using namespace std;
  5. const int maxn=100+10;
  6. const int INF=0x3f3f3f3f;
  7. int n,ans,Min,Max;
  8. int g[maxn][maxn],match[maxn];
  9. bool vis[maxn];
  10. bool Find(int u){
  11. for(int i=1;i<=n;i++){
  12. if(!vis[i]&&g[u][i]>=Min&&g[u][i]<=Max){
  13. vis[i]=1;
  14. if(!match[i]||Find(match[i])){
  15. match[i]=u;
  16. return true;
  17. }
  18. }
  19. }
  20. return false;
  21. }
  22. bool judge(){
  23. memset(match,0,sizeof(match));
  24. for(int i=1;i<=n;i++){
  25. memset(vis,0,sizeof(vis));//这里记得初始化下
  26. if(!Find(i))
  27. return false;
  28. }
  29. return true;
  30. }
  31. int main(){
  32. int T,minl,maxr;
  33. scanf("%d",&T);
  34. while(T--){
  35. scanf("%d",&n);
  36. maxr=0;minl=INF;
  37. for(int i=1;i<=n;i++){
  38. for(int j=1;j<=n;j++){
  39. scanf("%d",&g[i][j]);
  40. minl=min(g[i][j],minl);
  41. maxr=max(g[i][j],maxr);//找到左右边界
  42. }
  43. }
  44. int l=0;
  45. int r=maxr-minl;//注意所求的答案是最小差值
  46. ans=0;
  47. while(l<=r){
  48. bool flag=false;
  49. int mid=(l+r)/2;
  50. for(int i=minl;i+mid<=maxr;i++){
  51. Min=i;Max=i+mid;
  52. if(judge()){
  53. flag=true;
  54. break;
  55. }
  56. }
  57. if(flag){
  58. ans=mid;
  59. r=mid-1;
  60. }
  61. else l=mid+1;
  62. }
  63. printf("%d\n",ans);
  64. }
  65. return 0;
  66. }

【最大匹配+二分答案】HDU 2236 无题II的更多相关文章

  1. HDU 2236 无题II(二分图匹配+二分)

    HDU 2236 无题II 题目链接 思路:行列仅仅能一个,想到二分图,然后二分区间长度,枚举下限.就能求出哪些边是能用的,然后建图跑二分图,假设最大匹配等于n就是符合的 代码: #include & ...

  2. Hdu 2236 无题II 最大匹配+二分

    题目链接: pid=2236">Hdu 2236 解题思路: 将行和列理解为二分图两边的端点,给出的矩阵即为二分图中的全部边, 假设二分图能全然匹配,则说明 不同行 不同列的n个元素 ...

  3. HDU 2236 无题II 题解

    题目 这是一个简单的游戏,在一个n*n的矩阵中,找n个数使得这n个数都在不同的行和列里并且要求这n个数中的最大值和最小值的差值最小. 输入格式 输入一个整数\(T\)表示\(T\)组数据. 对于每组数 ...

  4. HDU 2236 无题Ⅱ

    HDU 2236 无题Ⅱ 题目大意 这是一个简单的游戏,在一个\(n*n\)的矩阵中,找n个数使得这n个数都在不同的行和列里并且要求这n个数中的最大值和最小值的差值最小. solution 暴枚\(i ...

  5. Maximum Shortest Distance 最大团 二分答案 HDU 3585

    题意:给出n个点   要求取k个点  这k个点中  距离最小的两个点要求距离最大 拿到手看不出是最大团  也看不出是二分答案(第一次用) 因为答案必然存在 一定有一个最值  所以用二分答案来做 最大距 ...

  6. 【最大匹配+二分答案】POJ 3057 Evacuation

    题目大意 POJ链接 有一个\(X×Y\)的房间,X代表墙壁,D是门,.代表人.这个房间着火了,人要跑出去,但是每一个时间点只有一个人可以从门出去. 问最后一个人逃出去的最短时间,如果不能逃出去,输出 ...

  7. Marriage Match II 【HDU - 3081】【并查集+二分答案+最大流】

    题目链接 一开始是想不断的把边插进去,然后再去考虑我们每次都加进去边权为1的边,直到跑到第几次就没法继续跑下去的这样的思路,果不其然的T了. 然后,就是想办法咯,就想到了二分答案. 首先,我们一开始处 ...

  8. bzoj 2402: 陶陶的难题II 二分答案维护凸包

    2402: 陶陶的难题II Time Limit: 40 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 68  Solved: 45[Submi ...

  9. HDU 3586 二分答案+树形DP判定

    HDU 3586 『Link』HDU 3586 『Type』二分答案+树形DP判定 ✡Problem: 给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏 ...

随机推荐

  1. Linux下Shell日期的格式,你知道几种?

    Linux下Shell日期的格式,你知道几种? 不管是哪种语言,日期/时间都是一个非常重要的值.比如我们保存日志的时候,往往是某个前缀再加上当前时间,这样日志文件名称就可以做到唯一. 在Shell环境 ...

  2. pycharm代码中批量粘贴内容的快捷键

    windows电脑中,竖向批量复制的快捷键:Alt

  3. python3 while循环

    python不支持n++这样格式,因为python中变量不像c那样事先定义好变量类型,在内存中开辟指定的空间,然后赋值. python中以字符串为例,事先在内存划分空间来存放字符串,然后用变量名来指向 ...

  4. 秒懂JVM的三大参数类型,就靠这十个小实验了

    秒懂JVM的三大参数类型,就靠这十个小实验了 你好,我是悟空哥,「7年项目开发经验,全栈工程师,开发组长,超喜欢图解编程底层原理」.手写了2个小程序,Java刷题小程序,PMP刷题小程序,已发布到公众 ...

  5. @RequiresPermissions注解的作用,超级简单的权限验证

    是shiro里面权限验证的一个注解 @RequiresPermissions(value = {"engineeringPause:download", "workCon ...

  6. 浅析Kubernrtes服务类型(Service Types)

    先上图 在Kubernetes集群中,service通过标签选择器选着对应的pod,然后对请求进行转发,看个动画,能直接了当体会到便签选择器 pod,endpoints,service三者关系 1.举 ...

  7. HTTP 的前世今生,那些不为人知的秘密

    每个时代,都不会亏待会学习的人. 大家好,我是 yes. HTTP 协议在当今的互联网可谓是随处可见,一直默默的在背后支持着网络世界的运行,对于我们程序员来说 HTTP 更是熟悉不过. 平日里我们都说 ...

  8. IIS目录浏览模式打开文件还是无法下载

    写在前面的话 IIS已经设置目录浏览启用,且可以正常访问到文件,说明这些设置没问题,但是点击文件进行下载时,却提示无法下载,文件不存在等等,有的又可以,一顿操作后发现,原来是文件类型没有包含在MIME ...

  9. 剑指offer-二叉树

    1. 平衡二叉树 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 解: 要么是一颗空树,要么左右子树都是平衡二叉树且左右子树深度之差不超过1 1 # class TreeNode: 2 # def _ ...

  10. matplotlib绘图教程,设置标签与图例

    大家好,欢迎大家阅读周四数据处理专题,我们继续介绍matplotlib作图工具. 在上一篇文章当中我们介绍了matplotlib这个包当中颜色.标记和线条这三种画图的设置,今天我们同样也介绍三种新的设 ...