洛谷P1021郵票面值設計題解 zhengjun

2021-10-03 05:35:24 字數 1627 閱讀 7816

題目描述

給定乙個信封,最多隻允許貼上n

nn張郵票,計算在給定k

kk(n+k

≤15

n+k\leq 15

n+k≤15

)種郵票的情況下(假定所有的郵票數量都足夠),如何設計郵票的面值,能得到最大值max

maxma

x,使在1

11至max

maxma

x之間的每乙個郵資值都能得到。

例如,n=3

n=3n=

3,k=

2k=2

k=2,如果面值分別為1

11分、4

44分,則在1

11分~6

66分之間的每乙個郵資值都能得到(當然還有8

88分、9

99分和12

1212

分);如果面值分別為1

11分、3

33分,則在1

11分~7

77分之間的每乙個郵資值都能得到。可以驗證當n=3

n=3n=

3,k=

2k=2

k=2時,7

77分就是可以得到的連續的郵資最大值,所以max

=7

max=7

max=

7,面值分別為1

11分、3

33分。

輸入格式

2

22個整數,代表n

nn,kkk。

輸出格式

2

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

第二行,輸出「max

=s

max=s

max=

s」,s

ss表示最大的面值。

輸入輸出樣例

輸入 #1 複製

3

2

輸出 #1 複製
1

3max=

7

動態規劃,用fif_

fi​表示拼成i

ii最少需要多少張郵票。

轉移公式:fj=

min(

fj,f

j−ai

+1

)f_j=min(f_j,f_+1)

fj​=mi

n(fj

​,fj

−ai​

​+1)

再來乙個dfs

dfsdf

s就可以了。

(加上乙個回溯)

#include

using

namespace std;

int n,m;

int a[21]

;int maxx=

0,ans[21]

;int f[

51000];

intdp

(int k)

void

dfs(

int k)

return;}

int end=

dp(k-1)

;for

(int j=a[k-1]

+1;j<=end+

1;j++)}

intmain()

洛谷P1021 郵票面值設計 題解

首先,看到這題,大家肯定首先想到暴力 dfs吧!可是這題暴力會超時 好吧我們還是來認真思考下正解 思路應該是列舉出所有種類的郵票,最後判斷一下,並記錄最大值 暴搜,不行的話,可以剪枝?1.使a陣列保持單調遞增,dfs中每次從a k 1 1開始搜尋,以此來消除重複的搜尋 常規思路 2.a 1 1 每次...

洛谷 P1021 郵票面值設計

要求乙個組合,很明顯是用dfs來搜尋,那麼怎麼判斷呢?用揹包!dp i 表示拼湊出 i 這個數的最小郵票數,然後統計dp i n 的個數即可 但是經過幾次嘗試就會發現,其上界值一定 當前最大的連續值,因為再大,就會出現 當前最大連續值 1 的空缺。上 include using namespace ...

洛谷P1021 郵票面值設計

一道奇怪的題目,考場不一定能想得出來 首先證明1的必要性,顯然,沒有1無法表示出1,因此1是必要的 有了1之後,就有了乙個列舉範圍,對於一種郵票,它的面值要比前乙個大。設前i 1種郵票能表示出來的最大範圍為up,那麼一定不能表示出up 1,所以第i種郵票的最大面值為up 1 複雜度未知,不過這種小資...