搜尋。lg傳送門
直接暴力有60,考場上寫的60,結果掛成40。
考慮在暴力的同時加個記憶化,把剩下的球隊數和每支球隊的得分情況hash一下,每次搜到還剩\(t\)個隊的時候就在雜湊表裡找一下,有就拿來算答案,沒有就把這次的結果存進雜湊表。複雜度\(o(\)能過\()\)。
#include #include #include #define r register
#define i inline
#define l long long
using namespace std;
const int n = 13, b = 29, yyb = 1e9 + 7;
int a[n], b[n], f[n], sta[n], stp, n, t, k;
unordered_map m;
i int cmp(int x, int y)
l dfs(int x, int y)
if (f[x] + 3 <= a[x] && k)
f[x] += 3, --k, o += dfs(x, y + 1), f[x] -= 3, ++k;
if (f[y] + 3 <= a[y] && k)
f[y] += 3, --k, o += dfs(x, y + 1), f[y] -= 3, ++k;
if (f[x] < a[x] && f[y] < a[y] && t)
++f[x], ++f[y], --t, o += dfs(x, y + 1), --f[x], --f[y], ++t;
return o % yyb;
}int main()
HNOI2013 遊走題解
題目鏈結 給你乙個 n 個點 m 條邊的無向連通圖從 1 號點出發,每次隨機選擇當前頂點的某條邊走到下乙個點,並獲得這條邊的分數,分數為這條邊的編號,一旦到了 n 號點就結束遊走,總分為獲得分數的總和。安排每條邊的編號,使總分的期望值最小,並輸出最小的期望值 看完題目能夠發現,我們只要求出經過每一條...
習題 HNOI2013 消毒(匈牙利)
傳送門我們先考慮低維的情況 這應該有手就行 可惜我沒有手 我們注意到,我們肯定都是一次性將一次一行或者一列直接覆蓋完全,這一定是最優的方法 之後我們觀察乙個矩陣,其只需要 min x,y 條線段就可以覆蓋完全,這剛好就是題目中所提到的代價計算方式 然後就可以轉換成為最小點覆蓋的問題 三維的情況也有點...
HNOI 2013 旅行 (數學)
感覺此題難啊,數學還是太渣了,看了半天的題解才算明白了點兒。給乙個長度為n且僅由1和 1組成的序列ai,i 1,2,n,每個位置都有另乙個值vi,要求用某種方案將序列劃分為m 0 m n 個非空連續子串行,使得所有子串行中和的最大絕對值最小,並且在所有滿足上述條件的方案中劃分位置的v i 序列字典序...