/*
郵票已知乙個 n 枚郵票的面值集合(如,)和乙個上限 k —— 表示信封上能夠貼 k 張郵票。計算從 1 到 m 的最大連續可貼出的郵資。 例如,假設有 1 分和 3 分的郵票;你最多可以貼 5 張郵票。很容易貼出 1 到 5 分的郵資(用 1 分郵票貼就行了),接下來的郵資也不難: 6 = 3 + 3 7 = 3 + 3 + 1 8 = 3 + 3 + 1 + 1 9 = 3 + 3 + 3 10 = 3 + 3 + 3 + 1 11 = 3 + 3 + 3 + 1 + 1 12 = 3 + 3 + 3 + 3 13 = 3 + 3 + 3 + 3 + 1。 然而,使用 5 枚 1 分或者 3 分的郵票根本不可能貼出 14 分的郵資。因此,對於這兩種郵票的集合和上限 k=5,答案是 m=13。
input
第 1 行: 兩個整數,k 和 n。k(1 <= k <= 200)是可用的郵票總數。n(1 <= n <= 50)是郵票面值的數量。 第 2 行 .. 檔案末: n 個整數,每行 15 個,列出所有的 n 個郵票的面值,面值不超過 10000。
output
第 1 行: 乙個整數,從 1 分開始連續的可用集合中不多於 k 張郵票貼出的郵資數。
sample input
5 21 3
sample output 13
hint
source
usaco train
解題思路:剛開始看到這題目時侯,以為要列舉計算,沒有思路,看了解題報告侯,其實這題與貨幣系統有著相似的解法,只不過這次要求的是能夠
構成的「貨幣」面值而已,這裡可以從面值為1開始,逐漸加,值到郵票數量大於給定數量。這題可以說是動態規劃,也可以是說成是貪心,
因為我不知道他具體屬於哪一類,只是含有揹包影子
且看動態轉移方程。
dp[i]=min(i>=a[j].(j=0..n))這裡dp[i]表示面值為i時的最小有票數,注意初始化(memset(dp,inf,sizeof(dp))dp[0]=0
必不可少)
memory
time
language
code length
9244 245 c++/edit
871 b */
#include#include#include#include using namespace std;
const int maxn=2000000+1;
int dp[maxn];//dp[j]表示當面值為j時的票數
int a[55];
int inf=200000010;
int min(int a,int b)
i--;
printf("%d\n",i);
}return 0;
}
有趣的DP 郵票問題
題目描述 給定乙個信封,最多隻允許貼上n n 100 張郵票,我們現在有m m 100 種郵票,面值分別為 x1,x2 xm xi 255為正整數 並假設各種郵票都有足夠多張。要求計算所能獲得的郵資最大範圍。即求最大值max,使1 max之間的每乙個郵資都能得到。例如 n 4,有2種郵票,面值分別為...
概率DP 收集郵票
問題 h 收集郵票 時間限制 1 sec 記憶體限制 162 mb 題目描述 有n種不同的郵票,皮皮想收集所有種類的郵票。唯一的收集方法是到同學凡凡那裡購買,每次只能買一張,並且買到的郵票究竟是n種郵票中的哪一種是等概率的,概率均為1 n。但是由於凡凡也很喜歡郵票,所以皮皮購買第k張郵票需要支付k元...
郵票問題詳細題解 簡單dp
已知乙個 n 枚郵票的面值集合 如,和乙個上限 k 表示信封上能夠貼 k 張郵票。計算從 1 到 m 的最大連續可貼出的郵資。例如,假設有 1 分和 3 分的郵票 你最多可以貼 5 張郵票。很容易貼出 1 到 5 分的郵資 用 1 分郵票貼就行了 接下來的郵資也不難 6 3 3 7 3 3 1 8 ...