賄賂FIPA 階段內轉移無後效

2022-02-15 23:28:33 字數 2004 閱讀 5599

fipa(國際國際計畫協會聯合會)近期將進行投票,以確定下一屆ipwc(國際規劃世界盃)的主辦方。

鑽石大陸的代表本內特希望通過以贈送鑽石買通國家的方式,獲得更多的投票。

當然,他並不需要買通所有的國家,因為小國家會跟隨著他們附庸的大國進行投票。

換句話說,只要買通了乙個大國,就等於獲得了它和它統治下所有小國的投票。

例如,c在b的統治下,b在a的統治下,那麼買通a就等於獲得了三國的投票。

請注意,乙個國家最多附庸於乙個國家的統治下,附庸關係也不會構成環。

請你編寫乙個程式,幫助本內特求出在至少獲得m個國家支援的情況下的最少花費是多少。

輸入包含多組測試資料。

第一行包含兩個整數n和m,其中n表示參與投票的國家的總數,m表示獲得的票數。

接下來n行,每行包含乙個國家的資訊,形式如下:

countryname diamondcount dcname dcname …

其中countryname是乙個長度不超過100的字串,表示這個國家的名字,diamondcount是乙個整數,表示買通該國家需要的鑽石數,dcname是乙個字串,表示直接附庸於該國家的乙個國家的名字。

乙個國家可能沒有任何附庸國家。

當讀入一行為#時,表示輸入終止。

每組資料輸出乙個結果,每個結果佔一行。

1≤n≤200,

0≤m≤n

3 2

aland 10

boland 20 aland

coland 15

#

20
主要難在輸入上,

寫個快讀, 特判 '#' 返回 -1

寫個map動態給新來的城市標號 / 舊城市直接 取編號

然後dp狀態 f[u][i] 以u為根至少獲得i張票

狀態屬性 最小值

轉移 f[u][i] = min(f[u][i - j] + f[son][j], f[u][i]);

因為本身 f[son][y] 就在f[u][x]的集合之內, 所以我們要規定順序

強制在通過son轉移的時候, 要把這個son先放在 f[u][x]集合之外

然而按照邊迴圈son轉移正好可以滿足

這體現了dp階段內當前狀態的無後效性(大概)

#include #define rep(i,a,b) for(int i=a;i<=b;++i)

#define per(i,a,b) for(int i=a;i>=b;--i)

using namespace std;

typedef long long ll;

const int maxn = 205;

int n, m, a[maxn];

int fa[maxn], si[maxn];

int h[maxn], ne[maxn << 1], to[maxn << 1], tote;

ll f[maxn][maxn];

string s, t;

mapst;

int read()

return ans;

}void unit(int x, int y)

void dfs(int u)

for (int i = h[u]; i; i = ne[i])

per (j, si[u], 0)

per (k, min(si[to[i]], j), 1)

f[u][j] = min(f[u][j], f[u][j - k] + f[to[i]][k]);

if (u) rep (j, 0, si[u]) f[u][j] = min(f[u][j], (ll)a[u]);

}int main()

}rep (i, 1, n) if (fa[i] == i) unit(0, i);

dfs(0);

cout << f[0][m] << '\n';

}return 0;

}

dfs 概率 Jzoj P2941 賄賂

description 議會裡有n個議員,每個議員有兩個屬性 級別和忠誠值。現在你要在議會通過乙個議案,乙個議案通過當且僅當嚴格超過一半的議員投贊同票。乙個議員投贊同票的機率就是忠誠值除以100。議員們有著奇怪的癖好 他們都喜歡吃糖。你帶了k個糖果用來賄賂議員,每個糖果的作用是使得某個議員的忠誠值增...

搜尋 數學 概率 JZOJ 2941 賄賂

有n nn個議員,給出他們的級別和忠誠度。我們手上有k kk個糖果,每使用乙個可以使一位議員增加10點忠誠度。我們現在有乙個議案,當議員同意個數嚴格大於人數的一半時才能算通過。否則你要把所有投反對票的人殺死,成功率為a a b a a b a a b 其中a aa為給定的引數,b bb為所有投反對票...

魔方陣 奇數階 單偶數階 雙偶數階

include include include int magic1 int n 奇數階魔方陣 int row 0 int col n 2 for int i 0 ireturn arr int magic2 int n 單偶數階魔方陣 能被2整除,不能被4整除 思路 可以分為4個奇數階矩陣 int...