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 與 ...