洛谷 P2725 郵票 Stamps(dp)

2022-02-27 12:11:15 字數 1335 閱讀 8463

給一組 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。 [規模最大的乙個點的時限是3s]

輸入格式:

第 1 行: 兩個整數,k 和 n。k(1 <= k <= 200)是可用的郵票總數。n(1 <= n <= 50)是郵票面值的數量。

第 2 行 .. 檔案末: n 個整數,每行 15 個,列出所有的 n 個郵票的面值,每張郵票的面值不超過 10000。

輸出格式:

第 1 行:乙個整數,從 1 分開始連續的可用集合中不多於 k 張郵票貼出的郵資數。

輸入樣例#1: 複製

5 2

1 3

輸出樣例#1: 複製

13
題目翻譯來自nocow。

usaco training section 3.1

分析:用dp[i]表示最少用幾張牌組成i方程,需要乙個小技巧:我們可以將k這個條件轉化成求什麼時候,需要組成數字i的牌數》k。

剩下的話,不難想到,

,用這個式子跑迴圈就可以了。

1 #include 2 #include 3

using

namespace

std;

4const

int maxn=2000005;5

int dp[maxn],a[100];//

dp[i]:用幾張牌組成i

6int

main()714

for(int i=0;i999999999

;15 dp[0]=0;16

for(int i=1;i<=n;i++)

1722}23

for(int i=1;i<=maxn;i++)

2430}31

return0;

32 }

洛谷 P2725 郵票 Stamps

判斷從1開始的能湊出的連續的郵票價值 1 n 會給出兩個數k和n,k是可用的郵票總數。n是郵票面值的數量。接下去的n行是每種郵票的價值 注意 每種郵票是可以多次使用完全揹包模型,用一維即可,如果用二維會記憶體超限,記錄的是湊足i的價值至少要多少郵票,如果大於k,輸出i 1,跳出循換,如果沒有跳出,輸...

郵票 Stamps(洛谷)

題目描述 給一組 n 枚郵票的面值集合和乙個上限 k 表示信封上能夠貼 k 張郵票。請求出最大的正整數 m,滿足 1 到 m 的面值都可以用不超過 k 張郵票表示出來。輸入格式 輸入的第一行是兩個整數,分別代表郵票上限 k 和郵票面值數 n。自第二行起,共有 n 個整數,第 i 個整數代表第 i 種...

洛谷 P4538 收集郵票

有n種不同的郵票,皮皮想收集所有種類的郵票。唯一的收集方法是到同學凡凡那裡購買,每次只能買一張,並且買到的郵票究竟是n種郵票中的哪一種是等概率的,概率均為1 n。但是由於凡凡也很喜歡郵票,所以皮皮購買第k張郵票需要支付k元錢。現在皮皮手中沒有郵票,皮皮想知道自己得到所有種類的郵票需要花費的錢數目的期...