题目链接

这道题的主要思想是贪心。

题目的要求用几个硬币将1~x的数都能够凑出的最少硬币个数。这里注意一下是都凑出而不是同时凑出。

先讨论什么时候无解。所有的自然数都可以用1堆砌而成。换而言之只要有1这个流氓在就可以凑齐。没有1就凑不出来1。

我们用一个数num表示我们目前凑完了sum这个数,准备凑下一个,要开始拿钱了,并且对于所有p(p<=sum)都能刚好凑出,又对于所有g(g>sum)凑不出。

那么我们这个时候要怎么拿钱呢。运用贪心思想,尽可能拿大的。那么什么时候是不可能的呢?即这个硬币q>sum+1时。因为这样就没有方法能够通过这个硬币与之前的凑出sum+1.

所以我们只需要选择q<=sum+1的同时q尽量大的硬币,这样子保证了q~sum+q都能被凑出。此时sum=sum+q

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int read(){
int res=,f=;
char ch=getchar();
while(ch<''||ch>''){
if(ch=='-')f=-;
ch=getchar();
}
while(ch>=''&&ch<=''){
res=res*+(ch-'');
ch=getchar();
}
return res*f;
}
int x,n,a[],sum,ans;
int main(){
x=read();n=read();
for(int i=;i<=n;++i){
a[i]=read();
}
sort(a+,a+n+);
if(a[]!=){
cout<<"-1";
return ;
}
while(sum<x){
int i;
for(i=n;i>=;i--)
if(a[i]<=sum+)break;
ans++;
sum+=a[i];
}
cout<<ans;
}

最新文章

  1. 学习ASP.NET Core, 怎能不了解请求处理管道[4]: 应用的入口&mdash;&mdash;Startup
  2. SGU 455 Sequence analysis(Cycle detection,floyd判圈算法)
  3. MVC5 ModelBinder
  4. 通告机制Notification
  5. Struts2传参碰到的奇怪问题
  6. linux最常用的基本命令
  7. Apache Hadoop 2.9.2 的Federation架构设计
  8. 『高性能模型』Roofline Model与深度学习模型的性能分析
  9. (转)Python__slots__详解
  10. Groovy语言学习--语法基础(4)
  11. Shell-16--函数
  12. centos7.2 安装 mysql5.7
  13. koa2的文件上传
  14. 【转】caffe数据层及参数
  15. ubatu 安装nodejs npm liveserver
  16. 前端Web安全介绍及规避。。。
  17. 133克隆图 &#183; Clone Graph
  18. Node.js系列——(2)发起get/post请求
  19. js操作cookie的一些注意项
  20. 使用 ServiceStack 构建跨平台 Web 服务(转)

热门文章

  1. vm启动时通过U盘安装的方法
  2. STM32之ADC实例(基于DMA方式)
  3. java.lang.ClassCastException: com.sun.proxy.$Proxy4 cannot be cast
  4. hdu 1203 转换的01包问题。。。。
  5. php 环境搭建问题
  6. 重装win7后如何恢复ubuntu引导
  7. “df: cannot read table of mounted file systems”.
  8. java 实现二分查找算法
  9. 安装window、linux双系统
  10. DNS服务和BIND