HDOJ---2236 无题II[二分枚举+匈牙利]

无题II

Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 571    Accepted Submission(s): 296


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

 

Input
输入一个整数T表示T组数据。
对于每组数据第一行输入一个正整数n(1<=n<=100)表示矩阵的大小。
接着输入n行,每行n个数x(0<=x<=100)。

 

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

 

Sample Input
1 4 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4

 

Sample Output
3

 

Author
xhd

 

Source
HDOJ 2008 Summer Exercise(2)- Hold by Captain Xu

 

Recommend
lcy
code :
  1 /*
  2 为了保证每行每列只取一个元素,我们可以从二分图最大匹配的思想入手,把行和列分别看做二分图左右两部分,
  3 i-j的边权就是第i行第j列的元素的值。这样构图之后,求得的二分图最大匹配的4条边就是不在同行或同列的4个元素。
  4 有了这个思想时候,我们只需要再保证4个元素中最大值与最小值之差尽量小就可以了,于是我们可以二分枚举最大值与最小值之差,
  5 并枚举边权值的下界,如果枚举到某个边权值的下界时该图存在最大匹配,那么就更新max,否则就更新min。
  6 */
  7 #include <iostream>   
  8 #include <iomanip>   
  9 #include <fstream>   
 10 #include <sstream>   
 11 #include <algorithm>   
 12 #include <string>   
 13 #include <set>   
 14 #include <utility>   
 15 #include <queue>   
 16 #include <stack>   
 17 #include <list>   
 18 #include <vector>   
 19 #include <cstdio>   
 20 #include <cstdlib>   
 21 #include <cstring>   
 22 #include <cmath>   
 23 #include <ctime>   
 24 #include <ctype.h> 
 25 using namespace std;
 26 
 27 #define MAXN 110
 28 
 29 int map[MAXN][MAXN];
 30 int vst[MAXN];
 31 int path[MAXN];
 32 int n;
 33 int p;
 34 int minnum,maxnum,midnum;
 35 
 36 bool dfs(int v)
 37 {
 38     for(int i=0;i<n;i++)
 39         if(map[v][i]>=p&&map[v][i]<=p+midnum&&!vst[i])
 40         {
 41             vst[i]=1;
 42             if(path[i]==-1||dfs(path[i]))
 43             {
 44                 path[i]=v;
 45                 return true;
 46             }
 47         }
 48     return false;
 49 }
 50 
 51 bool hungary()
 52 {
 53     memset(path,-1,sizeof(path));
 54     for(int i=0;i<n;i++)
 55     {
 56         memset(vst,0,sizeof(vst));
 57         if(!dfs(i))                                //一旦发现有横坐标没有对应的y坐标与其匹配就return false
 58             return false;
 59     }
 60     return true;                       //表示所有的横坐标已经全部匹配,return true
 61 }
 62 
 63 int main()
 64 {
 65     int t;
 66     int i,j;
 67     scanf("%d",&t);
 68     while(t--)
 69     {
 70         int gmax=0,gmin=101;
 71         scanf("%d",&n);
 72         for(i=0;i<n;i++)
 73             for(j=0;j<n;j++)
 74             {
 75                 scanf("%d",&map[i][j]);
 76                 gmax=gmax>map[i][j]?gmax:map[i][j];
 77                 gmin=gmin<map[i][j]?gmin:map[i][j];
 78             }
 79         maxnum=gmax-gmin;
 80         minnum=0;
 81         while(1)
 82         {
 83             bool flag=false;
 84             midnum=(maxnum+minnum)/2;
 85             for(p=gmin;p+midnum<=gmax;p++)
 86             {
 87                 if(hungary())
 88                 {
 89                     flag=true;
 90                     break;
 91                 }
 92             }
 93             if(flag)
 94                 maxnum=midnum;
 95             if(midnum==minnum)                  //注意:这三个if的顺序不能随意颠倒
 96                 break;
 97             if(!flag)
 98                 minnum=midnum;            
 99         }
100         printf("%d\n",maxnum);
101     }
102     return 0;
103 }

 

转载于:https://www.cnblogs.com/XBWer/archive/2012/08/14/2638207.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle 11gR2 RAC恢复OCR和VOTE DISK

Oracle 11gR2 RAC恢复OCR和VOTE DISK原文链接&#xff1a;http://www.askmaclean.com/archives/11-2-lost-ocr-votedisk-group-recovery.html之前有同学在我的Oracle Allstarts群里讨论关于丢失包含ocr和votedisk的ASM diskgroup导致11gR2 RAC cluster无法正常启动的问题&#…

vue3开发实践笔记

一、setup 生命周期 1、执行时机&#xff1a;会在beforeCreate之前执行&#xff0c;内部无法访问this 2、setup 包含的生命周期 onBeforeMount——挂载开始前调用 onMount——挂载后调用 onBeforeUpdate——当响应数据改变&#xff0c;且重新渲染前调用 onUpdated——重新渲…

GetLastError()函数返回值及含义

GetLastError返回的值通过在api函数中调用SetLastError或SetLastErrorEx设置。函数并无必要设置上一次错误信息&#xff0c;所以即使一次GetLastError调用返回的是零值&#xff0c;也不能担保函数已成功执行。只有在函数调用返回一个错误结果时&#xff0c;这个函数指出的错误结…

LINQ系列:Linq to Object排序操作符

LINQ排序操作符包括&#xff1a;OrderBy、OrderByDescending、ThenBy、ThenByDescending及Reverse。 1. OrderBy 1>. 原型定义 public static IOrderedQueryable<TSource> OrderBy<TSource, TKey>(this IQueryable<TSource> source, Expression<Func&l…

第5章 为手机而设计

5&#xff0e;为手机而设计 至此,你已经了解了手机&#xff0c;通过一个简单的应用程序的演练了工作方式并且学习XAML的基础知识。现在你应该开始考虑你要编写的应用程序的性质。虽然很容易想到的是手机只是Silverlight存在于另一个屏幕上而已&#xff0c;但是事实没有这么简单…

vue3.x全局toast、message、loading组件

vue3.x全局toast、message、loading组件Toast组件loadingToast组件 在 src/components下创建toast文件夹&#xff0c;并依此创建index.vue和index.js 1、index.vue 一般toast会有如下功能&#xff1a;背景色、字体颜色、文本、停留时间 <template> <div class"…

知天命

吾乃浑浑噩噩、后知后觉之人。 今欲窥天命之道。天命&#xff0c;何也&#xff1f; 天之命乎&#xff0c;或人之道乎&#xff1f; 人生于此世。 盲从于世上&#xff0c;依其欲而行&#xff0c;乃天之命也。 人可存之世上仅百载&#xff0c;终白土亦。 随意欲而为&#xff0c;应…

教程:在 VM Depot 中查找 Azure 可用的虚拟机镜像

&#xfeff;&#xfeff;发布于 2014-07-08 作者 陈 忠岳 对于 Azure 的社区管理虚拟机资源库——VM Depot——的用户来说&#xff0c;网站的搜索功能已得到极大的改善。这一搜索能力的增强&#xff0c;可以帮助用户更容易地找到 Azure 可用的开源 Linux 虚拟机。 搜索发现 …

HDU 1203 I NEED A OFFER!(01背包)

I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9932 Accepted Submission(s): 3687 Problem DescriptionSpeakless很早就想出国&#xff0c;现在他已经考完了所有需要的考试&#xff0c;准备了…

H5实现微信摇一摇功能

//摇一摇<script type"text/javascript"> var num 1; var SHAKE_THRESHOLD 2000; var last_update 0; var x y z last_x last_y last_z 0; function init() { if (window.DeviceMotionEvent) { window.addEventListener(devicemotion, deviceMotionHan…

PHP起点 - 运算符

一.算术运算符 名称    操作符    举例 加法          $a $b 减法     -      $a - $b 乘法     *     $a * $b 除法运算   /      $a / $b 取余运算   %     $a % $b 递增运算        $a, $a 递减运算  …

Java I/O流

字符流&#xff1a; Reader&#xff1a;用于读取字符流的抽象类。子类必须实现的方法只有 read(char[], int, int) 和 close()。 |---BufferedReader&#xff1a;从字符输入流中读取文本&#xff0c;缓冲各个字符&#xff0c;从而实现字符、数组和行的高效读取。 可以指定缓冲区…

java中跨时区的日期格式转换

2019独角兽企业重金招聘Python工程师标准>>> 先上一段代码 public class DataTransfer {public static void main(String[] args) {String dateStr "Sep 30, 2014 12:00:00 AM";SimpleDateFormat sdf new SimpleDateFormat();sdf.applyPattern("MM…

Asp.net WebForm中应用Jquery EasyUI Layout

Asp.net WebForm中应用Jquery EasyUI Layout 按照EasyUI文档中的示例&#xff0c;编写layout代码&#xff1a; <body class”easyui-layout”> <div region"north" border"false" style"height:60px;background:#B3DFDA;">north reg…

C语言读取写入CSV文件 [二]进阶篇——写入CSV文件

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 本系列文章目录 [一] 基础篇 [二] 进阶篇——写入CSV [三] 进阶篇——读取CSV 什么是 包裹&#xff08;使用双引号&…

ABAP 数值四舍五入函数

DATA : dat TYPE p DECIMALS 9 VALUE 12.5445 ,dat1 TYPE p DECIMALS 9 .DATA dat2 TYPE p DECIMALS 9 VALUE 12.540.* 方法一 CALL FUNCTION HR_NZ_ROUNDING_DECIMALSEXPORTINGvalue_in datconv_dec 2 " 设置保留几位小数IMPO…

K8S中部署apisix(非ingress)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 不使用pvc的方式在K8S中部署apisix-gateway 简介 因为公司项目准备重构&#xff0c;现在做技术储备&#xff0c;之前公司项…

MVC3 URL 数据绑定

从数据库中取出的Int类型的ID&#xff0c;在Razor视图中显示的链接地址格式为:http://localhost:1846/news/Detail/1 Router格式&#xff1a;{controller/action/id} 数据库中对应的字段为ID,对应的Action中的参数名也必须为ID 否则 编译器会报参数值为Null的错误。 当数据库中…

机器学习理论知识部分--偏差方差平衡(bias-variance tradeoff)

摘要&#xff1a; 1.常见问题 1.1 什么是偏差与方差&#xff1f; 1.2 为什么会产生过拟合&#xff0c;有哪些方法可以预防或克服过拟合&#xff1f; 2.模型选择例子 3.特征选择例子 4.特征工程与数据预处理例子 内容&#xff1a; 1.常见问题 1.1 什么是偏差与方差&#xff1f; …

MVC中获取模型属性的Range和StringLength验证特性设置

MVC中的客户端及服务端模型验证信息都以ModelMetadata类型作为承载&#xff0c;在获得属性的ModelMetadata之后&#xff08;还不知道怎么获取ModelMetadata的童鞋请自行恶补&#xff09;&#xff0c;我们可以轻松得到一些我们在模型中定义的特性&#xff0c;比如显示名称、是否…