洛谷 1164 小A點菜(動態規劃的揹包問題)

2022-09-18 01:33:28 字數 959 閱讀 5058

題目背景

uim神犇拿到了uoi的ra(鐳牌)後,立刻拉著**小a到了一家……餐館,很低端的那種。

uim指著牆上的價目表(太低階了沒有選單),說:「隨便點」。

題目描述

不過uim由於買了一些輔(e)輔(ro)書,口袋裡只剩m元(m<=10000)。

餐館雖低端,但是菜品種類不少,有n種(n<=100),第i種賣ai元(ai<=1000)。由於是很低端的餐館,所以每種菜只有乙份。

小a奉行「不把錢吃光不罷休」,所以他點單一定剛好吧uim身上所有錢花完。他想知道有多少種點菜方法。

由於小a肚子太餓,所以最多只能等待1秒。

輸入輸出格式

輸入格式:

第一行是兩個數字,表示n和m。

第二行起n個正數ai(可以有相同的數字,每個數字均在1000以內)。

輸出格式:

乙個正整數,表示點菜方案數。

輸入輸出樣例

輸入樣例#1:

4 4

1 1 2 2

輸出樣例#1:

3首先很容易就知道設f[i]為用了i元的方案數,先將f[0]賦值為1。

然後兩重迴圈,一重是列舉點第幾道菜,一重列舉點了這道菜後的**。最後我們很容易得出dp式f[j]:=f[j]+f[j-a[i]]

**如下:

var a,f:array[0..10000] of longint;

n,m,i,j:longint;

begin

readln(n,m);

for i:=1

to n do

read(a[i]);

f[0]:=1;

for i:=1

to n do

for j:=m downto a[i] do f[j]:=f[j]+f[j-a[i]];

writeln(f[m]);

end.

洛谷1164 小A點菜

uim神犇拿到了uoi的ra 鐳牌 後,立刻拉著 小a到了一家 餐館,很低端的那種。uim指著牆上的價目表 太低階了沒有選單 說 隨便點 不過uim由於買了一些輔 e 輔 ro 書,口袋裡只剩m元 m 10000 餐館雖低端,但是菜品種類不少,有n種 n 100 第i種賣a i元 a i 1000 ...

洛谷 P1164 小A點菜

不過uim由於買了一些輔 e 輔 ro 書,口袋裡只剩m元 m 10000 餐館雖低端,但是菜品種類不少,有n種 n 100 第i種賣ai元 ai 1000 由於是很低端的餐館,所以每種菜只有乙份。小a奉行 不把錢吃光不罷休 所以他點單一定剛好吧uim身上所有錢花完。他想知道有多少種點菜方法。由於小...

洛谷P1164 小A點菜

題目背景 uim神犇拿到了uoi的ra 鐳牌 後,立刻拉著 小a到了一家 餐館,很低端的那種。uim指著牆上的價目表 太低階了沒有選單 說 隨便點 題目描述 不過uim由於買了一些輔 e 輔 ro 書,口袋裡只剩m元 m 10000 餐館雖低端,但是菜品種類不少,有n種 n 100 第i種賣ai元 ...