完全揹包變式 一本通 1293 買書

2021-10-01 11:18:19 字數 1643 閱讀 4386

1293:買書

【題目描述】

小明手裡有n元錢全部用來買書,書的**為10元,20元,50元,100元。

問小明有多少種買書方案?(每種書可購買多本)

【輸入】

乙個整數 n,代表總共錢數。(0≤n≤1000)

【輸出】

乙個整數,代表選擇方案種數。

【輸入樣例】

20【輸出樣例】

2【提示】

樣例輸入

樣例輸入2:

15樣例輸入3:

0樣例輸出

樣例輸出2:

0樣例輸出3:

0思路:

二維陣列中乙個單元格的意義在於用 j 元考慮買前 i 種書的方案數。

注意:1、特別要注意初始化,考慮一開始,對於第乙個物體(第一種書)而言,此題不再是**大於一本書的**,二維**中的數a[i][j]就有值了,而是一定能夠正好買到這本書,所以應該j是w[1]的倍數,才有值,也就是一種方案。此外,從第二種書開始,如果j正好能夠買到這本書,這也是要算一種方案的,所以應該將a[i-1][0]值為1。

2、最值思想體現在最多的方案數,所以利用二維陣列**將所有的情況都記錄下來,每個值求的時候都要選擇合適的加起來。因為涉及到要疊加,所以初始化為0( j!=0 ),且壓縮只有一位陣列記錄是不可以的,用兩個一維陣列或者是採用整個二維陣列也行。

(3、另:因為這是一種完全揹包的求方案種數的問題,所以也可以直接將f[0][0] 初始化為1,其餘初始化為0(恰好)然後從頭前往後遍歷就行了。emmm,聯絡後面幾篇部落格的講解之後。)

公式:

圖:例如有20元

//完全揹包問題 變式 還是利用那個二維陣列

//書的**就是代價 書價值是方案數

intmain()

;memset

(a,0

,sizeof

(a))

;//先將所有初始化為0

int n;

//n代表總錢數

cin>>n;

int k;

a[1][

0]=1

;//如果後面有新加入的書 j正好是w[i]的倍數,可以全用後面品種買下 這也算是一種方案

a[2][

0]=1

; a[3]

[0]=

1;a[4][

0]=1

;for

(int i=

1;i<=

4;i++

)//4種書都走一遍 一種一種往裡加 一種一種考慮

}else}}

}//檢測

/*for(int j=0;j<=n;j++)

cout

cout<

[n];

return0;

}

CJOJ 2307 一本通 完全揹包(動態規劃)

設有n種物品,每種物品有乙個重量及乙個價值。但每種物品的數量是無限的,同時有乙個揹包,最大載重量為m,今從n種物品中選取若干件 同一種物品可以多次選取 使其重量的和小於等於m,而價值的和為最大。第一行 兩個整數,m 揹包容量,m 200 和n 物品數量,n 30 第2.n 1行 每行二個整數wi,u...

一本通1267 01揹包問題(深度搜尋 動態規劃)

1267 01揹包問題 題目描述 乙個旅行者有乙個最多能裝 mm 公斤的揹包,現在有 nn 件物品,它們的重量分別是w1,w2,wnw1,w2,wn,它們的價值分別為c1,c2,cnc1,c2,cn,求旅行者能獲得最大總價值。輸入 第一行 兩個整數,mm 揹包容量,m 200m 200 和nn 物品...

一本通 5 1 練習 1 括號配對

plysc 記憶體限制 512 mib 時間限制 1000 ms 標準輸入輸出 題目型別 傳統 評測方式 文字比較 上傳者 1bentong 題目描述 hecy 又接了個新任務 be 處理。be 中有一類被稱為 gbe。以下是 gbe 的定義 空表示式是 gbe 如果表示式a是 gbe,則 a 與 ...