HDU 2236 無題II 二分 最大匹配

2021-07-08 19:42:58 字數 1025 閱讀 7324

題目:

problem description

這是乙個簡單的遊戲,在乙個n*n的矩陣中,找n個數使得這n個數都在不同的行和列裡並且要求這n個數中的最大值和最小值的差值最小。

input

輸入乙個整數t表示t組資料。

對於每組資料第一行輸入乙個正整數n(1<=n<=100)表示矩陣的大小。

接著輸入n行,每行n個數x(0<=x<=100)。

output

對於每組資料輸出乙個數表示最小差值。

在km演算法專題裡面碰到的這道題,分到裡面不太合適,應該分到匈牙利演算法專題裡面,被誤導了。。。

找出n*n個元素的最大值vmax和最小值vmin,那麼差值一定在l=0到r=(vmax-vmin)之間,於是二分列舉差值進行匹配,在當前差值下能夠完全匹配,那麼更新r,同時儲存當前差值,否則更新l。二分查到完畢後,輸出之前儲存的差值,就是結果

#include #include #include #include #include #include #include #include using namespace std;

const int n = 110;

const int inf = 0x3f3f3f3f;

int match[n];

int mpa[n][n];

int p, mid, n;

bool used[n];

bool dfs(int v)

}return false;

}bool hungary()

return true;

}int main()

int r = vmax - vmin, l = 0, res;

while(l <= r) //發現大神們的二分姿勢好奇怪,這個姿勢是我的

if(f) res = mid, r = mid - 1;

else l = mid + 1;

}printf("%d\n", res);

}return 0;

}

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 2236 最大匹配 列舉上下界)

思路 引 為了保證每行每列只取乙個元素,我們可以從二分圖最大匹配的思想入手,把行和列分別看做二分圖左右兩部分,i j的邊權就是第i行第j列的元素的值。這樣構圖之後,求得的二分圖最大匹配的4條邊就是不在同行或同列的4個元素。有了這個思想時候,我們只需要再保證4個元素中最大值與最小值之差盡量小就可以了,...

無題II 二分 匈牙利

這是乙個簡單的遊戲,在乙個n n的矩陣中,找n個數使得這n個數都在不同的行和列裡並且要求這n個數中的最大值和最小值的差值最小。輸入乙個整數t表示t組資料。對於每組資料第一行輸入乙個正整數n 1 n 100 表示矩陣的大小。接著輸入n行,每行n個數x 0 x 100 對於每組資料輸出乙個數表示最小差值...