luogu P1021 郵票面值設計

2021-10-03 07:08:49 字數 1327 閱讀 3297

給定乙個信封,最多隻允許貼上n張郵票,計算在給定k(n+k≤15)種郵票的情況下(假定所有的郵票數量都足夠),如何設計郵票的面值,能得到最大值max,使在1至max之間的每乙個郵資值都能得到。

例如,n=3,k=2,如果面值分別為1分、4分,則在1分~6分之間的每乙個郵資值都能得到(當然還有8分、9分和12分);如果面值分別為1分、3分,則在1分~7分之間的每乙個郵資值都能得到。可以驗證當n=3,k=2時,7分就是可以得到的連續的郵資最大值,所以max=7,面值分別為1分、3分

2個整數,代表n,k。

2行。第一行若干個數字,表示選擇的面值,從小到大排序。

第二行,輸出「max=s」,s表示最大的面值。

3 2

1 3

max=7

本題可分為兩部分。

一是求在規定的k值中找到最大值s此部分可以套用完全揹包模型,具體轉移方程f[j] = min(f[j], f[j - a[i]] + 1)

第二部分是找到所有情況中的最大值s我們可以採用dfs搜尋,每次數量達到k時就更新一下s陣列儲存答案即可。

#include

#include

#define inf 0x3f3f3f3f

using namespace std;

const

int max =

1e5+5;

int a[max]

, ans[max]

, n, k, f[max]

;intdp(

int t)

for(

int i =

1; i <= a[t]

* n; i++

)return a[t]

* n;

//否則返回最大值

}int maxn =-1

;void

dfs(

int t,

int mx)

return;}

for(

int i = a[t -1]

+1; i <= mx +

1; i++)}

intmain()

洛谷1021 郵票面值設計

給定乙個信封,最多隻允許貼上n張郵票,計算在給定k n k 40 種郵票的情況下 假定所有的郵票數量都足夠 如何設計郵票的面值,能得到最大值max,使在1 max之間的每乙個郵資值都能得到。例如,n 3,k 2,如果面值分別為1分 4分,則在1分 6分之間的每乙個郵資值都能得到 當然還有8分 9分和...

p1021 郵票面值設計

題目連線 正常的搜尋是不容易搜尋到答案的,因為無法確定最大的內個max值。但是我們可以這樣考慮,首先搜尋的範圍是遞增的。這個範圍的下界是上乙個數 1,上界的確定,考慮揹包問題。d i 代表拼成i最少的數是多少個。因此搜尋到答案後,我們對d i 進行計算就可以得到最大能拼成的值。include inc...

P1021 郵票面值設計

給定乙個信封,最多隻允許貼上n張郵票,計算在給定k n k 15 種郵票的情況下 假定所有的郵票數量都足夠 如何設計郵票的面值,能得到最大值max,使在1 max之間的每乙個郵資值都能得到。例如,n 3,k 2,如果面值分別為1分 4分,則在1分 6分之間的每乙個郵資值都能得到 當然還有8分 9分和...