zoukankan      html  css  js  c++  java
  • 洛谷 1658 购物

                  洛谷 1658 购物

    题目描述

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

    输入输出格式

    输入格式:

    第一行两个数X、N,以下N个数,表示每种硬币的面值。

    【数据规模】

    对于30%的数据,满足N≤3,X≤20;

    对于100%的数据,满足N≤10,X≤1000.

    输出格式:

    最少需要携带的硬币个数,如果无解输出-1.

    输入输出样例

    输入样例#1: 
    20 4
    1 2 5 10
    输出样例#1: 
    5
    题解:
    这道题我记得我们之前考过,当时傻,所以并不会。就骗了三十分,hhh。
    当时是我们区学长出的题,其实我们区除了hmq之外的学长都是挺有人性的。
    这道题主要是用到了贪心的思想,

    每一次都要在找到比当前该凑数钱小的最大面值数,这样就可以在钱币数量相同的情况下可拼凑价值最大。
    代码:
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 const int maxn=1005;
     5 int i,j,n,x,s[maxn],ans,sum;
     6 int main() {
     7     std::cin>>x>>n;
     8     for(i=0; i<n; i++) std::cin>>s[i];
     9     std::sort(s,s+n);
    10     if(s[0]!=1) {
    11         puts("-1");return 0;
    12     }
    13     while(sum<x) {
    14         for(i=n-1; i>=0; i--)
    15             if(s[i]<=sum+1) break;
    16         ans++;sum+=s[i];
    17     }
    18     printf("%d
    ",ans);
    19     return 0;
    20 }
    View Code
     
  • 相关阅读:
    Next Permutation
    Substring with Concatenation of All Words
    Divide Two Integers
    Remove Duplicates from Sorted Array
    3sum closest
    ThreadPoolExecutor参数与拒绝策略
    多线程情况下ArrayList 如何解决线性安全问题
    ArrayList扩容机制jdk1.8
    SpringCloud--工作流程(好文)
    Java面试——TCP与HTTP
  • 原文地址:https://www.cnblogs.com/GTBA/p/9102077.html
Copyright © 2011-2022 走看看