zoukankan      html  css  js  c++  java
  • HDU 2236 无题Ⅱ

    HDU 2236 无题Ⅱ

    题目大意

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

    solution

    暴枚(i,j),很容易想到每个(i)应一个(j),所以可以考虑二分图最大匹配
    再看极差,显然具有单调性,答案一定处于这个区间内
    所以我们采用二分的方法搜索答案,对每个(mid)进行(judge)就好了
    剩下的就是码力问题了……

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=100+3,inf=0x3f3f3f3f;
    int a[maxn][maxn],Min,Max,slack[maxn],un,vn;
    bool vis[maxn];
    inline int read(){
       int s=0,w=1;
       char ch=getchar();
       while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
       while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
       return s*w;
    } 
    bool dfs(int u,int l, int r){
    	for(int v=1;v<=un;v++){
    		if(a[u][v]>=l&&a[u][v]<=r&&!vis[v]){
    			vis[v]=1;
    			if(slack[v]==-1||dfs(slack[v],l,r)){
    				slack[v]=u;
    				return 1;
    			}
    		}
    	}
    	return 0;
    }
    bool hungary(int mid,int l,int r){
    	int res=0;
    	memset(slack,-1,sizeof(slack));
    	for(int u=1;u<=un;u++){
    		memset(vis,0,sizeof(vis));
    		if(!dfs(u,l,r)) return 0;
    	}
    	return 1;
    }
    bool check(int mid){
    	for(int i=0;i+mid<=100;i++){
    		if(hungary(mid,i,i+mid)){
    			return 1;
    		}
    	}
    	return 0;
    }
    int main(){
    	int t;
    	t=read();
    	while(t--){
    		Max=-1;Min=inf;
    		int n;
    		n=read();
    		un=vn=n;
    		for(int i=1;i<=n;i++){
    			for(int j=1;j<=n;j++){
    				a[i][j]=read();
    				Max=max(Max,a[i][j]);
    				Min=min(Min,a[i][j]);
    			}
    		}
    		int l=0,r=Max-Min;
    		while(l<=r){
    			int mid=(l+r)/2;
    			if(check(mid)){
    				r=mid-1;
    			}else l=mid+1;
    		}
    		printf("%d
    ",l);
    	}
    	return 0;
    }
    
  • 相关阅读:
    surfaceView和Camera配合进行摄像头的预览
    Android中SurfaceView的使用详解
    Java 图片与byte数组互相转换
    Android的GridView和Gallery结合Demo
    AlertDialog dismiss 和 cancel方法的区别
    HttpClient4.0
    IntentFilter
    ViewPagerindicator 源码解析
    android背景平铺方式 tileMode
    android requestWindowFeature使用详解
  • 原文地址:https://www.cnblogs.com/rui-4825/p/12886581.html
Copyright © 2011-2022 走看看