1
輸入是一個可用的預算,派對數量,每個派對的門票價格和聚會上的樂趣。任務是通過可用的預算和使用的預算輸出儘可能多的樂趣。如果您可以選擇同樣樂趣的兩方,請選擇便宜的一方。 (這是一個SPOJ problem。)派對時間表 - 古典揹包
我創建了兩個數組:
m[i][j]
從各方得到最大的樂趣多達我 預算Ĵp[i][j]
最低價格PY來獲得最大的。從各方 多達我與預算Ĵ樂趣
然後,對每個I高達#parties和對每個j達到預算我計算的m[i][j]
和p[i][j]
值是這樣的:
for(T i = 1; i <= parties; i++) {
for(T j = 0; j <= budget; j++) {
//We get more fun by attending party i
if(price[i] <= j && m[i-1][j-price[i]] + fun[i] > m[i-1][j]) {
m[i][j] = m[i-1][j-price[i]] + fun[i];
p[i][j] = p[i-1][j-price[i]] + price[i];
//We get same fun by attending i, but more cheaply
} else if(price[i] <= j && m[i-1][j-price[i]] + fun[i] == m[i-1][j] && p[i-1][j-price[i]] + price[i] < p[i-1][j]) {
m[i][j] = m[i-1][j-price[i]] + fun[i];
p[i][j] = p[i-1][j-price[i]] + price[i];
//We can't visit the party
} else {
m[i][j] = m[i-1][j];
p[i][j] = p[i-1][j];
}
}
}
對於我發現的任何測試用例(如果需要,我可能會共享一些測試用例),該算法輸出的結果與網上裁判批准的算法相同。但是,這個沒有批准。
該算法有什麼問題?
Here是完整的程序。