習題 HNOI2013 消毒(匈牙利)

2022-07-06 21:24:16 字數 645 閱讀 4769

傳送門我們先考慮低維的情況

這應該有手就行

可惜我沒有手

我們注意到,我們肯定都是一次性將一次一行或者一列直接覆蓋完全,這一定是最優的方法

之後我們觀察乙個矩陣,其只需要\(min(x,y)\)條線段就可以覆蓋完全,這剛好就是題目中所提到的代價計算方式

然後就可以轉換成為最小點覆蓋的問題

三維的情況也有點類似,我們每一次一定是將乙個面刪去,

然後你會發現不會三分圖匹配這種玩意,所以考慮暴力列舉一維,剩下的兩維二分圖匹配即可

#include#include#include#includeusing namespace std;

vectorg[5005];

int t;

int a,b,c;

int minn,tot;

int dir[4][5005],ans;

int mat[5005],vis[5005];

int used[5005];

void init()

bool dfs(int u,int tag)

}if(b==minn)

else if(c==minn)

/*for(int i=1;i<=3;i++)

HNOI2013 比賽 搜尋

搜尋。lg傳送門 直接暴力有60,考場上寫的60,結果掛成40。考慮在暴力的同時加個記憶化,把剩下的球隊數和每支球隊的得分情況hash一下,每次搜到還剩 t 個隊的時候就在雜湊表裡找一下,有就拿來算答案,沒有就把這次的結果存進雜湊表。複雜度 o 能過 include include include ...

HNOI2013 遊走題解

題目鏈結 給你乙個 n 個點 m 條邊的無向連通圖從 1 號點出發,每次隨機選擇當前頂點的某條邊走到下乙個點,並獲得這條邊的分數,分數為這條邊的編號,一旦到了 n 號點就結束遊走,總分為獲得分數的總和。安排每條邊的編號,使總分的期望值最小,並輸出最小的期望值 看完題目能夠發現,我們只要求出經過每一條...

HNOI 2013 旅行 (數學)

感覺此題難啊,數學還是太渣了,看了半天的題解才算明白了點兒。給乙個長度為n且僅由1和 1組成的序列ai,i 1,2,n,每個位置都有另乙個值vi,要求用某種方案將序列劃分為m 0 m n 個非空連續子串行,使得所有子串行中和的最大絕對值最小,並且在所有滿足上述條件的方案中劃分位置的v i 序列字典序...