链接:点击打开链接

题意:在一个n*n的矩阵中,找n个数使得这n个数都在不同的行和列里而且要求这n个数中的最大值和最小值的差值最小

代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int s[105][105],match[105],vis[105];
int n,p,low,high,mid,minn,maxx;
int dfs(int x){
int i;
for(i=1;i<=n;i++){
if(s[x][i]>=p&&s[x][i]<=p+mid&&!vis[i]){
vis[i]=1;
if(!match[i]||dfs(match[i])){
match[i]=x;
return 1;
}
}
}
return 0;
}
int hungarian(){
int i;
memset(match,0,sizeof(match));
for(i=1;i<=n;i++){
memset(vis,0,sizeof(vis));
if(!dfs(i))
return 0;
}
return 1;
} //匈牙利算法模板
int main(){ //要求不同行不同列因此用到二分图最大匹配看是否全部的
int t,i,j,sign; //数据在指定区间中
scanf("%d",&t);
while(t--){
scanf("%d",&n);
memset(s,0,sizeof(s));
maxx=-1;minn=99999999;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
scanf("%d",&s[i][j]);
maxx=max(maxx,s[i][j]);
minn=min(minn,s[i][j]);
}
high=maxx-minn;low=0; //二分差值的大小
while(low<high){
sign=0;
mid=(low+high)/2;
for(p=minn;p+mid<=maxx;p++){//看是否完美匹配时全部数据满足在[p,p+mid]范围内
if(hungarian()){
sign=1;
break;
}
}
if(sign)
high=mid; //满足时则改变high值看能否继续满足更小的区间
if(!sign)
low=mid+1;
}
printf("%d\n",high);
}
return 0;
}



最新文章

  1. mac常用的命令
  2. Response.End抛出ThreadAbortException 异常
  3. MyBatis之四:调用存储过程含分页、输入输出参数
  4. NOIP2003 侦探推理
  5. 将UIImage保存到iOS照片库和对应程序沙盒中-b
  6. CodeForces 566D 并查集集合合并
  7. 【js数据结构】可逐次添加叶子的二叉树(非最优二叉树)
  8. 爬取知名社区技术文章_article_3
  9. jsfl 删除库指定内容
  10. Spring基于AspectJ的AOP的开发——注解
  11. js隐藏中间4位,变成‘*’号
  12. Android,重新出发!
  13. Python 可调用对象
  14. Go语言实战 (William,Kennedy 等著)
  15. 将Boost库添加到Visual Studio 2017
  16. 1028. Hanoi Tower Sequence
  17. [转]How to Use xp_dirtree to List All Files in a Folder
  18. js-权威指南学习笔记18
  19. linux可视化桌面安装
  20. RabbitMQ消息队列生产者和消费者

热门文章

  1. 【codeforces 501D】Misha and Permutations Summation
  2. Linux 上安装 Zookeepr
  3. 洛谷 P2393 yyy loves Maths II
  4. 站点搭建从零開始(二)server空间
  5. Codeforces Round #261 (Div. 2)459A. Pashmak and Garden(数学题)
  6. 使用LSTM做电影评论负面检测——使用朴素贝叶斯才51%,但是使用LSTM可以达到99%准确度
  7. TSNE——目前最好的降维方法
  8. ES正常停止步骤
  9. 91.Bower : ENOGIT git is not installed or not in the PATH 解决方法
  10. Java 以空格分割字符串