题目:https://www.luogu.org/problemnew/show/P1474
本来想枚举当前价值s为 i ,它由Σd [ i - a[k] ]得到。
但是有重复,比如 1+2=3和2+1=3会被视作不同的方案。
所以还是正常完全背包。
#include<iostream> #include<cstdio> using namespace std; int n,s; long long a[30],d[10005]; int main() { d[0]=1; scanf("%d%d",&n,&s); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); for(int i=1;i<=n;i++) for(int j=a[i];j<=s;j++) d[j]+=d[j-a[i]]; printf("%lld",d[s]); return 0; }