UVa 242 郵票和信封(完全揹包)

2022-06-20 22:30:15 字數 1100 閱讀 5521

題意:輸入s(每個信封能貼上的最多郵票數量)和若干郵票組合,選出最大連續郵資最大的乙個組合(最大連續郵資也就是用s張以內的郵票來湊1,2,3,4...n,如果無法湊成n+1,那麼最大值也就是n了)。如果有多個最大值,則優先考慮郵票數少的,其次考慮郵票面值最大的那個更小的。

思路:完全揹包問題。

完全揹包是物品無限,在這裡和題意相符合,每種郵票也是可以無限使用的。最大連續郵資就相當於乙個揹包容量,d[i]表示當最大連續郵資為i時所需要的最少的郵票數量,如果d[i]>s,說明 i 是無法湊成的,最大連續郵資也就是 i-1 了

1 #include2 #include

3 #include4 #include5

using

namespace

std;67

const

int maxn = 25;8

const

int inf = 0x3f3f3f3f;9

10int

s, n, m;

11int

a[maxn];

12int dp[1005

];13

int ans[25

];14

1516

intmain()

1742}43

if (now > best) //

此時的最大連續郵資大於了之前的

4450

else

if (now == best) //

如果相等時

5158

else

if (a[a[0]] < max) //

如果郵票數量一樣多,則優先考慮郵票最大的那張更小的

5963}64

}65 printf("

max coverage =%4d :

", best);

66for (int i = 1; i <= number; i++)printf("

%3d"

, ans[i]);

67 puts(""

);68}69

return0;

70 }

uva674 完全揹包

題意 有5種硬幣1,5,10,25,50,現在隨意的給出乙個價錢,問你有幾種組合方式!輸入11 輸出41 1 10個 5 6 1 5 5 1,10 1 共4種 思路 滿足完全揹包思想,狀態轉移方程 dp i num k dp i dp i 為組合成i的不重複種數,num k 分別為1,5,10,25...

uva10465 完全揹包

題目大意 乙個人可以花m分鐘吃一種漢堡,可以花n分鐘吃另外一種漢堡,問在t時間內最多可以吃幾個漢堡 應該盡可能的不浪費時間,如果真的非得浪費時間就用這些時間喝啤酒。輸出喝啤酒的時間。思路 揹包 貪心 完全揹包 include using namespace std include include i...

01揹包和完全揹包

在hihocoder上面的題目中看到的這個問題,總結一下。先看01揹包問題。01揹包問題 乙個揹包總容量為v,現在有n個物品,第i個 物品體積為weight i 價值為value i 現在往揹包裡面裝東西,怎麼裝能使揹包的內物品價值最大?看到這個問題,可能會想到貪心演算法,但是貪心其實是不對的。例如...