题目描述
小A到了一家餐馆,一共有n种菜,每种菜都有自己的价格,小A有M元,在钱一定要花完的情况下,有多少种点菜方式。
样例输入
4 4
1 1 2 2
样例输出
3
思路
O(nm)
可以用暴力搜索,但无疑DP更加快,是个水水的01背包。
f[j]:=f[j]+f[j-a[i]];
var
a,f:array[0..10000] of longint;
n,m,i,j:longint;
begin
f[0]:=1;
readln(n,m);
for i:=1 to n do
read(a[i]);
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.