「Taking the Marbles」 是一個有趣的遊戲,這個遊戲是這樣的:對於每一次的遊戲,都有 N 個盒子擺設在桌面上 (將它們分別編號成 1~N),而在遊戲開始之前,第 i 個盒子內事先被擺放了 Xi 個彈珠,並且每一個盒子都是被闔上的。
之後遊戲共有 R 個回合,每一個回合玩家都必須從卡片堆中抽出位於頂端的那張卡片,第 j 張卡片上面將會有兩行數字。第一行有Mj個數字V1,V2,…,VMj,代表在第j回合你可以打開編號為V1,V2,…,VMj 的盒子;之後卡片的第二行有一個正整數Kj,表示在第j回合你可以拿走至多 Kj 個彈珠 (當然,你只能拿走在該回合被打開之盒子中的彈珠),並且,如果你想要的話,你可以在該回合任意地調配盒子中的彈珠數目,也就是把一些彈珠自原本所在的盒子移動至另一個被開啟的盒子中。所有在一個回合中被打開的盒子皆會在該回合結束時再次關閉。你可以假設每個盒子都可以擺無限多個彈珠。
現在,你是這個遊戲的狂熱粉絲,因此和朋友家人玩過了無數次這個遊戲的你心中不免產生了一個疑問──如果我事先知道了所有的數值,我最多究竟能夠在又遊戲結束時拿走幾個彈珠?為了解答這個問題,你決定寫一個程式來計算看看,看最多到底可以拿走幾個彈珠。
輸入檔的第一行是一個正整數T,表示之後有 T 筆測試資料。
對於每一筆測試資料,第一行有兩個正整數N, R(1≦N≦1500, 1≦R≦100),分別代表盒子的數量和該場遊戲的回合數。
第二行有 N 個整數Xi (1≦i≦N),代表在遊戲開始前第i個盒子中有 Xi (0≦Xi≦5000)個彈珠。
第三行開始有2R行,每兩行皆代表一個回合,第2i+1行 (1≦i≦R) 首先有一個正整數 Mi (1≦Mi≦N),之後緊接著有 Mi 個正整數V1,V2,…,VMi代表將在第i個回合被開啟的盒子編號;第2i+2行 (1≦i≦R) 則有一個正整數Ki,代表在第i個回合最多可以取走多少彈珠。(1≦Ki≦2147483647)
對於第 x筆測試資料,請輸出一個整數 y 代表最多可以取走多少個彈珠。
輸出格式為:「Game #x: y」(不包含上下引號)。
2 5 2 1 1 2 5 9 2 1 2 3 2 3 4 6 3 2 7 5 10 2 1 2 3 2 2 3 18
Game #1: 8 Game #2: 21
Migrated from old NTUJ.
IOI2010國手 楊鈞百出題
No. | Testdata Range | Score |
---|