0-1背包 和 计数类DP 的结合
#include<iostream>
using namespace std;
const int N=11,M=1e5;
int n,m,a[N],f[N][M];//选前i个数构成总和为j的方案数
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
f[0][0]=1;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=m;j++)
{
f[i][j]=f[i-1][j];//不选第i个数情况
if(j>=a[i])//选第i个数情况(前提j>=a[i])
{
f[i][j]=f[i-1][j]+f[i-1][j-a[i]];//0-1背包问题关系式,由于计数类所以取加减
}
}
}
cout<<f[n][m]<<endl;
return 0;
}