这是一个典型的背包方案问题,设f[j]为当前价值为j的方案数,则f[j]=f[j]+f[j-a[i]],即当前方案数为选这个的方案数和不选这个东西的方案数,代码如下
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int n,t=1,a[101],m,ans,x,y,f[5000001]; int flag[1000001]; int main() {cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; f[0]=1; for(int i=1;i<=n;i++) { for(int j=m;j>=a[i];j--) {f[j]+=f[j-a[i]]; } } cout<<f[m]; }
其余背包方案数问题:
原文地址:https://www.cnblogs.com/lcez56jsy/p/10506838.html
时间: 2024-10-10 16:18:43