洛谷1474货币系统——小心重复的完全背包

题目: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;
}

 

posted on 2018-02-22 14:21  Narh  阅读(148)  评论(0编辑  收藏  举报

导航