思路:
引:為了保證每行每列只取乙個元素,我們可以從二分圖最大匹配的思想入手,把行和列分別看做二分圖左右兩部分,i-j的邊權就是第i行第j列的元素的值。這樣構圖之後,求得的二分圖最大匹配的4條邊就是不在同行或同列的4個元素。
有了這個思想時候,我們只需要再保證4個元素中最大值與最小值之差盡量小就可以了,於是我們可以二分列舉最大值與最小值之差,並列舉邊權值的下界,如果列舉到某個邊權值的下界時該圖存在最大匹配,那麼就更新max,否則就更新min。
1 #include2 #include3 #include4 #include5 #include6view codeusing
namespace
std;
7#define maxn 111
8int
map[maxn][maxn];
9int
lx[maxn],ly[maxn];
10bool
mark[maxn];
11int
vmax,vmin,min,mid,max,p,n;
12bool
flag;
1314
bool dfs(int
u)23}24
}25return
false;26
}2728bool
hungry()
35return
true;36
}37intmain()49}
50 max=vmax-vmin;
51 min=0;52
while(true)53
58}59if(flag)max=mid;
60if(min==mid)break;61
if(!flag)min=mid;62}
63 printf("
%d\n
",max);64}
65return0;
66 }
HDU 2236 無題II 二分 最大匹配
題目 problem description 這是乙個簡單的遊戲,在乙個n n的矩陣中,找n個數使得這n個數都在不同的行和列裡並且要求這n個數中的最大值和最小值的差值最小。input 輸入乙個整數t表示t組資料。對於每組資料第一行輸入乙個正整數n 1 n 100 表示矩陣的大小。接著輸入n行,每行n...
HDU 2236 無題II 二分 最大匹配
題意 在乙個n n的矩陣中,找n個數使得這n個數都在不同的行和列裡並且要求這n個數中的最大值和最小值的差值最小。分析 二分列舉差值,如果滿足完全匹配則該差值符合。include include define clr x memset x,0,sizeof x int g 105 105 int li...
HDU 1179 (最大匹配)
題意 n個巫師,m個魔杖,求最大匹配 思路 二分圖 求最大匹配 ac 求 n m 的最大匹配 include include include include include includeusing namespace std const int maxn 105 bool used maxn in...