1 //求方案数 定义状态f[i][j] 用前i件物品恰好放够体积为j的背包 方案数
2 #include<bits/stdc++.h>
3 using namespace std;
4 const int maxm=10005;
5 const int maxn=105;
6 int n,m,v[maxn],f[maxn][maxm];
7 int main()
8 {
9 scanf("%d%d",&n,&m);
10 for(int i=1;i<=n;++i) scanf("%d",&v[i]);
11 f[1][v[1]]=1;//边界
12 for(int i=1;i<=n;++i)
13 for(int j=1;j<=m;++j)
14 {
15 f[i][j]=f[i-1][j];//用前i-1件恰好放够
16 if(j>v[i]) f[i][j]+=f[i-1][j-v[i]];//用前i-1件放一部分 再用这件填上剩下的部分
17 if(j==v[i]) ++f[i][j];//只用这一件就能放够
18 }
19 printf("%d",f[n][m]);
20 return 0;
21 }