数学【p1658】 购物

题目描述

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

分析:

看到题解做法没有说出原理,所以尝试解释一下.

首先,没有1元面值的硬币肯定无解,因为无法组成1元面值,况且如果我们有1元面值的硬币,那我们就能凑出其他面值(话说带多少硬币去买东西?

然后,我们选择从面值为1元开始凑出所有面值的纸币

(这句话和代码有出入,但是原理相同。)

我们每次选择小于等于当前总面值+1的最大面值的硬币。

//记录当前总面值为s

//因为我们此时可以凑出的面值为1~s的钱,我们想要去凑出面值为s+1的情况,所以说我们需要寻找一张面值为s+1的,如果没有,我们的选择将会是最大面值的,再用它(这个面值大的),去和其他面值的拼凑出更大面值.

概括来讲

以这个大面值为底,和之前的小面值,是可以凑出更大的面值的钱的.

//可能有点混乱.

以样例为例↓

1 2 5 10
now为当前面值,ans为选取的个数。
    now=0,ans=0//此时没有选取  
  需要寻找面值<=now+1的硬币.
    now=1,ans=1//此时选取面值为1的
  需要寻找面值<=2的硬币.
    now=3,ans=2//此时选取了面值为2的
  需要寻找面值<=4的硬币
    now=5,ans=3//又选取了面值为2的
  需要寻找面值<=6的硬币
    now=10,ans=4//选取了面值为5的
  需要寻找面值<=11的硬币
    now=20,ans=5//选取了面值为10的
这样我们选取的为1·2·2·5·10,是可以凑出1~20的所有情况的。

总之思想就是每次选择的硬币,是可以和前面已经出现过的面值,继续组成更大面值的,每次选择最大面值(满足条件的)的,我们就可以实现我们的贪心。

每一次都要在找到比当前该凑数钱小的最大面值数,这样就可以在钱币数量相同的情况下可拼凑价值最大。------此话出处

--------------------代码---------------------

#include<bits/stdc++.h>
#define IL inline
#define RI register int
IL void read(int &x)
{
    int f=1;x=0;char s=getchar();
    while(s>'9'||s<'0'){if(s=='-')f=-1;s=getchar();}
    while(s<='9'&&s>='0'){x=x*10+s-'0';s=getchar();}
    x*=f;
}
int x,N,now,ans;
int s[12];
int main()
{
    read(x),read(N);
    for(RI i=1;i<=N;i++)
        read(s[i]);
    std::sort(s+1,s+N+1);
    if(s[1]!=1)
    {
        puts("-1");
        exit(0);
    }
    while(now<x)
    {
        RI i;
        for(i=N;i;i--)
            if(s[i]<=now+1)break;
        ans++;
        now+=s[i];
        //printf("used:%d\n",s[i]);
    }
    printf("%d",ans);
}

转载于:https://www.cnblogs.com/-guz/p/9629623.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
P通信是一种基于数学理论的通信技术,它在通信领域具有重要的应用价值。数学理论是P通信的基础,下面将从几个方面解释其数学理论。 首先,P通信的数学理论中涉及了概率论与信息论。概率论是分析随机事件发生的概率、计算随机变量的特征和性质的数学理论。而信息论则研究信息的度量、编码、存储和传输等方面的问题。在P通信中,概率论的相关知识可以用来分析和描述信道中的噪声、干扰和误码率等情况,而信息论则可以用来优化编码方法,提高通信系统的可靠性和传输效率。 其次,P通信的数学理论中涉及了线性代数与矩阵理论。线性代数研究矢量空间、线性变换等代数结构的数学理论,而矩阵理论则研究矩阵的性质和运算规律。在P通信中,线性代数的相关知识可以用来描述信号的线性叠加以及信道中的线性传输特性,而矩阵理论则可以用来表示信号的转移矩阵、通信系统的状态空间模型等。 另外,P通信的数学理论中还涉及了数论和群论。数论研究整数的性质和运算规律,而群论则研究具有某些特定性质的代数结构。在P通信中,数论的相关知识可以用来研究编码和解码算法中的数学问题,而群论则可以用来研究密码学中的置换群与密码算法等。 综上所述,P通信的数学理论涵盖了概率论与信息论、线性代数与矩阵理论、数论和群论等多个方面的知识。这些数学理论为P通信的性能分析、信号处理和编码算法的设计提供了重要的理论基础,也为通信系统的优化和发展提供了有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值