zoukankan      html  css  js  c++  java
  • 购物

    题目描述

    你就要去购物了,现在你手上有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
    正解是贪心,每次拿当前能拿的最大的一个,这样算出来总数肯定是最少的,
    如果看代码比较难理解可以试试手推样例

    也可以完全背包
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int X,n,a[1002],sum,cnt;
     7 int main()
     8 {int i,j;
     9   cin>>X>>n;
    10   for (i=1;i<=n;i++)
    11     {
    12       scanf("%d",&a[i]);
    13     }
    14   sort(a+1,a+n+1);
    15   for (i=n;i>=1;i--)
    16     if (a[i]<=X) break;
    17   n=i;
    18   if (a[1]!=1)
    19     {
    20       cout<<-1;
    21       return 0;
    22     }
    23   if (n==1&&a[1]==1) 
    24     {
    25       cout<<X;
    26       return 0;
    27     }
    28   sum=0;
    29   a[n+1]=X;
    30   for (i=1;i<=n;i++)
    31     {
    32       while (sum<a[i+1]-1)
    33     sum+=a[i],cnt++;
    34     }
    35   cout<<cnt;
    36 }
  • 相关阅读:
    oo第二次总结
    oo第一次总结
    OO最后一次博客儿
    OO作业总结第三弹
    OO作业总结第二弹
    初学面向对象
    hi🎈
    散列函数及其应用
    结对项目作业
    构建之法第四,第十四章读书有感 (另补第十七章)
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/7804389.html
Copyright © 2011-2022 走看看