洛谷P1164 小A点菜

 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 }
原文地址:https://www.cnblogs.com/yu-xing/p/10313847.html