題目:
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 對於每組資料輸出乙個數表示最小差值...