题目
http://www.joyoi.cn/problem/tyvj-1096
解题思路
这是一个典型的 0/1 0 / 1 背包模型, N N 个正整数就是个物品, M M 就是背包的容积。在外层循环到时(表示从前 i i 个数中选),设表示“和为 j j ”有多少种方案。在具体实现中,只需要把上面代码中求的函数改为求和即可。
代码
#include<cstdio>
#define rep(i,x,y) for (register int i=x;i<=y;i++)
using namespace std;
int n,m,f[101],a[101];
int main()
{
scanf("%d%d",&n,&m); f[0]=1;
rep(i,1,n) scanf("%d",&a[i]);
rep(i,1,n) for (int j=m;j>=a[i];j--)
f[j]=f[j]+f[j-a[i]];
printf("%d",f[m]);
}