codeup22345 郵票問題

2021-08-17 15:45:48 字數 1620 閱讀 6026

時空限制    1000ms/128mb

給定乙個信封,最多隻允許貼上n(n<=100)張郵票,我們現在有m(m<=100)種郵票,面值分別為:x1,x2,…….xm分(xi<=255,為正整數),並假設各種郵票都有足夠多張.

要求計算所能獲得的郵資最大範圍,即求最大值max,使在1—max之間的每乙個郵資值都能得到.

例如:n=4,有2種郵票,面值分別為1分,4分,於是可以得到1----10分,和12分,13分,16分的郵資,由於不能得到11分和15分,所有郵資的最大範圍是max=10.    

從鍵盤輸入乙個文字檔案的檔名

,該檔案第

1行為最多貼上的郵票數n;第

2行為郵票種數

m,以下

m行各有乙個數字

,表示郵票的面值

xi.1.       若最大範圍為空,則在螢幕上輸出max=0

2.       若最大範圍不為空,則把結果輸出到螢幕上.

421

4

max=10

本題可以看成是乙個集合問題

,即求在貼的郵票不多於

n張的可滿足條件的郵資集。

集合問題的關鍵在於判定元素是否在集合中,

對於本題而言

,是判斷某個郵資是否在貼不多於

n張郵票可滿足。

這個判斷問題可以用遞迴的方法解決

。設當前考慮的郵資值為

maxv,

最多允許貼

n張郵票,

記為(maxv,n).

如果首先貼一張面值為

xi的郵票,

那麼剩下的問題是

(maxv-xi,n-1)

的問題。

如果(maxv-xi,n-1)

可解,那麼

(maxv,n)

問題也可解

。進一步

, 這個遞迴的演算法可以轉化為遞推的演算法來解決。

設f[value]

表示郵資為

value

時所需最少的郵票數,

f[maxv]=min。

當f[value]<=n

時,問題

(maxv,n)

可解,否則無解。

遞推演算法可以描述為

:

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

if (maxv>=x[i])

以樣例資料為例:

value

f[value]00

1min=1

2min=2

3min=3

4min=1

5min=2

6min=3

7min=4

8min=2

9min=3

10min=4

11min=5(>4)

#includeusing namespace std;

const int m = 105, n = 25600;

int x[m],f[n]=;    //f[i]  為面額為i所貼郵票最少張數

int main()

if (f[maxv]==0 || f[maxv]>n)

}}

Codeup 問題 A 裝箱問題

問題描述 有乙個箱子的容量為v v為正整數,且滿足0 v 20000 同時有n件物品 0的體積值為正整數。要求從n件物品中,選取若干裝入箱內,使箱子的剩餘空間最小。輸入 1行整數,第1個數表示箱子的容量,第2個數表示有n件物品,後面n個數分別表示這n件 物品各自的體積。輸出 1個整數,表示箱子剩餘空...

codeup 裝箱問題

時間限制 1 sec 記憶體限制 128 mb 獻花 105 解決 44 獻花 花圈 tk題庫 問題描述 有乙個箱子的容量為v v為正整數,且滿足0 v 20000 同時有n件物品 0的體積值為正整數。要求從n件物品中,選取若干裝入箱內,使箱子的剩餘空間最小。輸入 1行整數,第1個數表示箱子的容量,...

1045 郵票組合問題

description 某人有四張3分的郵票和三張5分的郵票,用這些郵票中的一張或若干張可以得到多少種不同的郵資?input output 可得到多少種 sample input sample output 19 hint 將問題進行數學分析,不同張數和面值的郵票組成的郵資可用下列公式計算 s 3 ...