題意:輸入s(每個信封能貼上的最多郵票數量)和若干郵票組合,選出最大連續郵資最大的乙個組合(最大連續郵資也就是用s張以內的郵票來湊1,2,3,4...n,如果無法湊成n+1,那麼最大值也就是n了)。如果有多個最大值,則優先考慮郵票數少的,其次考慮郵票面值最大的那個更小的。
思路:完全揹包問題。
完全揹包是物品無限,在這裡和題意相符合,每種郵票也是可以無限使用的。最大連續郵資就相當於乙個揹包容量,d[i]表示當最大連續郵資為i時所需要的最少的郵票數量,如果d[i]>s,說明 i 是無法湊成的,最大連續郵資也就是 i-1 了。
1 #include2 #include3 #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 現在往揹包裡面裝東西,怎麼裝能使揹包的內物品價值最大?看到這個問題,可能會想到貪心演算法,但是貪心其實是不對的。例如...