zoukankan      html  css  js  c++  java
  • 硬币

    题目要求硬币的数量有限制,所以可以开  b 数组记录当前该物品所取的件数。

    其中 b[j] 表示要想让 f[j] = 1 ,第 i 件物品至少需要 b[j] 个。

    f[i] 表示 i 能否被表示出来,能则为 1 ,否则为 0 。

    总结下自己的问题:

    1. b 数组要清零。

    2. f 数组要赋初值。

    具体参见注释。

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,a[101],c[101],f[100001],b[100001],ans;
    int main()
    {
        f[0] = 1;//赋初值 
        scanf("%d%d",&n,&m);
        for(int i = 1;i <= n;i ++) scanf("%d",&a[i]);
        for(int i = 1;i <= n;i ++) scanf("%d",&c[i]);
        for(int i = 1;i <= n;i ++)
        {
            memset(b,0,sizeof(b));//清零 
            for(int j = a[i];j <= m;j ++)
            {
                if(f[j-a[i]] == 0 || f[j] == 1) continue;//如果f[j-a[i]]不能被得到,那么返回。 
                if(b[j - a[i]] == c[i]) continue;//判断是否超过数量的限制。 
                b[j] = b[j - a[i]] + 1;f[j] ++;ans ++;//取的次数加一,并统计答案 
            }
        }
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    java代理的深入浅出(一)-Proxy
    事件分发模型的设计与实现
    LibProject使用theme无效。
    HeaderGridView
    android开源代码
    IOS学习4
    IOS学习3
    IOS学习2
    Mac上添加adb_usb.ini
    OC学习-1
  • 原文地址:https://www.cnblogs.com/ying-xue/p/ying-bi.html
Copyright © 2011-2022 走看看