zoukankan      html  css  js  c++  java
  • 硬币

    题目描述:你有n个硬币,第i个硬币面值为ai,现在总队长想知道如果丢掉了某个硬币,剩下的硬币能组成多少种价值?(0 价值不算)

    样例输入:

    3

    1 1 3

    样例输出:

    3

    3

    2

    数据范围:

    对于30%的数据 1<=n<=50,1<=ai<=100;
    对于100%的数据 1<=n<=100,1<=ai<=3000。

    算法:背包

    代码:

    #include <bits/stdc++.h>
    #define N 300001
    using namespace std;
    int n,a[105],f[N],g[N];
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<=n;i++) scanf("%d",&a[i]);
        f[0]=1;
        for (int i=1;i<=n;i++)
            for (int j=N;j>=0;j--)
                if(j+a[i]<=N) f[j+a[i]]+=f[j];
        for (int i=1;i<=n;i++)
        {
            for (int j=0;j<=N;j++) g[j]=f[j];
            int ans=0;
            for (int j=0;j<=N;j++)
                if(j+a[i]<=N) g[j+a[i]]-=g[j];
            for (int j=1;j<=N;j++)
                if(g[j]) ans++;
            printf("%d ",ans);
        }
    }
  • 相关阅读:
    io
    文件
    诚实
    没有犯错并不代表自己就是做得好
    脑力锻炼的随缘
    电路运算
    “容错率”
    GPU简介
    名与责任
    失眠和精神的思考
  • 原文地址:https://www.cnblogs.com/Yun-17/p/9588297.html
Copyright © 2011-2022 走看看