郵票(DP或貪心)

2021-06-14 12:16:47 字數 1381 閱讀 2359

/*

郵票已知乙個 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 ...