• 洛谷 P1658 购物


    题目链接

    题目描述

    你就要去购物了,现在你手上有N种不同面值的硬币,每种硬币有无限多个。为了方便购物,你希望带尽量少的硬币,但要能组合出1到X之间的任意值。

    题目分析

    题目要求组合出1到X之间的任意值,那么面值之中没有1的话就无法组合出1,所以面值中没有1即为无解的情况,而1也是必须要选的面值。

    对于值T,若我们已经能够组合出1~T-1中所有的值,而T是当前选用的硬币无法组合出的,那么我们再选一个面值为V(V≤T)的硬币,则T=T-V+V,其中T-V是我们已经能够组合出的值。同时,我们使用这些硬币还可以组合出V+1~V+T-1中所有的值,下一个无法组合的值就可以从V+T开始考虑。由于我们要求硬币的最小值,我们每次选择硬币中满足条件的最大面值即可。

    代码

     1 #include<algorithm>
     2 #include<cstdio>
     3 using namespace std;
     4 const int t[11]={0,1,2,5,10,20,50,100,200,500,1000};
     5 int x,n,ans,a[11];
     6 bool vis[1001];
     7 int main()
     8 {
     9     scanf("%d%d",&x,&n);
    10     for(int i=1;i<=n;++i)
    11         scanf("%d",&a[i]);
    12     sort(a+1,a+n+1);
    13     if(a[1]!=1)
    14         puts("-1");
    15     else
    16     {
    17         for(int now=1;now<=x;)
    18             for(int i=n;i>0;--i)
    19                 if(a[i]<=now)
    20                 {
    21                     now+=a[i];
    22                     ++ans;
    23                     break;
    24                 }
    25         printf("%d",ans);
    26     }
    27     return 0;
    28 }
    购物
  • 相关阅读:
    async和await
    Promise
    初始flexbox
    制作一个slider动画
    初探React编程逻辑(结合业务需求)
    原型(prototype)和继承(inherit)
    什么是词法环境(lexical scope)
    typeScript是什么
    typeScript基础类型
    原型,原型链,call/apply
  • 原文地址:https://www.cnblogs.com/Psephurus-Gladius-zdx/p/10800611.html
Copyright © 2020-2023  润新知