http://noi.openjudge.cn/ch0206/2985/
简单01背包方案数问题
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ms(i,j) memset(i,j, sizeof i);
using namespace std;
int n,t;
int a[30];
int f[1005];
int main()
{
scanf("%d%d", &n, &t);
for (int i=1;i<=n;i++) scanf("%d", &a[i]);
ms(f,0);
f[0] = 1;
for (int i=1;i<=n;i++)
for (int j=t;j>=a[i];j--)
{
f[j] += f[j-a[i]];
}
printf("%d\n", f[t]);
return 0;
}