题目(后面有中文大意)

Our dear Sultan is visiting a country where there are n different types of coin. He wants to collect as many different types of coin as you can. Now if he wants to withdraw X amount of money from a Bank, the Bank will give him this money using following algorithm.

withdraw(X){

if( X == 0) return;

Let Y be the highest valued coin that does not exceed X.

Give the customer Y valued coin.

withdraw(X-Y);

}

Now Sultan can withdraw any amount of money from the Bank. He should maximize the number of different coins that he can collect in a single withdrawal.

Input:

First line of the input contains T the number of test cases. Each of the test cases starts with n (1≤n≤1000), the number of different types of coin. Next line contains n integers C1, C2, … , Cn the value of each coin type. C1< C2< C3< … < Cn<1000000000. C1 equals to 1.

Output:

For each test case output one line denoting the maximum number of coins that Sultan can collect in a single withdrawal. He can withdraw infinite amount of money from the Bank.

Sample Input

2

6

1 2 4 8 16 32

6

1 3 6 8 15 20

Sample Output

6

4

题目大意

你要从银行取价值X的钱,有n种不同的硬币,银行给钱时会执行一个递归程序:
取钱(X){
if(X==0)return;
给你<=X的最大硬币Y;
取钱(X-Y);
}
你的目的是要取得硬币种类尽可能多,输入n(1<=n<=1000),和每种硬币的面值,输出最大种类数。

题解

思路:贪心
首先,假设从1到i被选中的硬币的和是sum[i],第i个硬币的值是a[i],那么当sum[i]< a[i+1]的时候,就可以在保持原来选的同时,选上第i+1个。(证明:假设sum[i]>=a[i+1],那么要选,一开始的数字就是sum[i],而sum[i]>=a[i+1],那么就可以选一次i+1,然后剩下的数字就不够sum[i]了,无法选够原来的了,此时假设不成立,即sum[i]< a[j])
由上述规律即可推出可以选一个数字i的两个条件:1.sum[i-1]< a[i];2.sum[i] (=sum[i-1]+a[i])< a[i+1];满足上述条件的情况下,就可以选这个数字了。
还有,一定要选第一个和最后一个(一样可以用反证法证明)
Then,注意要特判2以下的情况。
最后还有一点小优化:这个递推过程是单向且线性的,那么sum数组就可以简单地用一个sum变量来代替了(不过说实话没什么大用)
代码请参见文尾。


说点儿题外话:我一开始想到的确实是这个思路,可是马上被推翻了,因为按以往经验普及最后一道题总是特别难,不可能这么简单,于是想了一个dp+二分查找,才算觉得够难度了,可是,结果10分,我的内心是崩溃的O_O,惨痛的教训就是永远不要想当然,也不要相信样例(我就是这个算法过了样例)


还有,如果你是初一或初二,那么好好学oi吧,不要来机房混日子(我看见考试时有好几个人玩三维弹球,蜘蛛纸牌),来混日子还不如回去学文化课,还不如早日AFO(Away From OI)。不过,我还是认为这个行业是很有出路的。
如果要学OI的话,就利用好寒假和暑假,平常缓慢学习,积累经验,假期做出质的突破。
还有,不能眼高手低,不能遇难而退,不能半途而废。
最后,祝好好学习OI的人取得NOIP普及组一等奖(看看你们有几个,当年就我一个)


#include<bits/stdc++.h>
using namespace std;
int t,n,a[1005];int main(){//建议你们用scanf和printf,会快很多scanf("%d",&t);for(int i=1;i<=t;i++){scanf("%d",&n);for(int j=1;j<=n;j++){scanf("%d",&a[j]);}if(n<=2){//要特判2以下的情况printf("%d\n",n);continue;} int sum=a[1];int cnt=2;//Ñ¡µÚÒ»¸öºÍ×îºóÒ»¸ö for(int i=2;i<=n-1;i++){if(sum<a[i]&&sum+a[i]<a[i+1]){sum+=a[i];cnt++;}}printf("%d\n",cnt);}return 0;
}

转载于:https://www.cnblogs.com/stone41123/p/7581305.html

coin collector(一道测试题)相关推荐

  1. 爱因斯坦出的一道测试题

    下面是爱因斯坦出的一道测试题.他说世界上有99%的人回答不出这道题. 前提: 1 有五栋五种颜色的房子 2 每一位房子的主人国籍都不同 3 这五个人每人只喝一种饮料,只抽一种牌子的香烟,只养一种宠物 ...

  2. 一道测试题:改版某个APP界面,你要如何下手

    最近帮同学们看了一些面试题,发现有一类题目出场率很高,就是对某个产品页面进行改版. 这类题目其实挺招人恨的,因为这样的改版说实话就是让设计师yy着去改,但换个角度想,也许是企业就是想看谁yy得更严谨, ...

  3. 一道自创的招聘测试题

    首先声明我从来没有参加过招聘,但我觉得这不影响我提出这个招聘测试的问题. 选出你认为正确的一句英语(单选): It is widely believed that customers should b ...

  4. 最难面试IT公司的测试题

    逛网站时无意间看到一道测试题,看到这标题我吓到了(最难面试IT公司),本以为应该很难完成的,分析之后,花了半小时用python写出来了,各位朋友们也可以测试测试哦.不限语言. 这是题目发布网址:htt ...

  5. AI是万能的吗?当前AI仍面临的难题是什么?

    作者 | Charles Ollion 译者 | 王天宇 编辑 | Jane 出品 | AI 科技大本营(rgznai100) [导读]谈到人工智能(特别是计算机视觉领域),大家关注的都是这一领域不断 ...

  6. context存放内容_Go语言爱好者周刊:第 58 期—关于 context

    这里记录每周值得分享的 Go 语言相关内容,周日发布. 本周刊开源(GitHub:polaris1119/golangweekly[1]),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue[ ...

  7. c 结构体在声明时赋值_Java基础知识 初识Java 循环结构进阶 数组 数据类型 各种运算符...

    今天给大家带来的是初级Java基础部分的知识:包括初始Java.变量.常量.数据类型.运算符.各种选择结构.循环结构.数组等Java的基础语法部分!最后还有****循环结构的进阶****,步骤超详细, ...

  8. while的用法java_java中的while循环和do while循环

    那么在讲解循环之前呢我们先来了解一下什么是循环   生活中的例子 车子的轮胎他就是一直在循环 马拉松跑到也是在循环 因为运动员不停的一圈一圈在跑这也是一个循环 那么我们为什么要学习循环呢? 下面看一个 ...

  9. 从 ES 规范 中理解 this

    从 ES 规范 中理解 this 本以为对 JS 中的 this 已经很熟练了,再看完冴羽的博客后,才发现自己对 ES 规范知之甚少,原来我都是根据经验在判断 this,这篇文章会从最底层的 ES 规 ...

最新文章

  1. com.android.providers.telephony.MmsSmsDatabaseHelper
  2. 面试 | HashMap 为什么线程不安全?
  3. win8音频服务器未响应,大神为你详解win8系统右键点击文件提示“未响应”的解决教程...
  4. Session对象的应用
  5. 向预训练进一步:掩码式非自回归模型训练
  6. js时间搓化为今天明天_护肤品搓泥怎么办啊啊啊啊啊......
  7. 从别的网站服务器获取数据,使用get()方法以GET方式从服务器获取数据
  8. 会员管理系统c语言,路西牌会员管理系统。
  9. 机器人当上“央视主播”,主持人感慨未来要下岗
  10. html阶梯统计,html,_有什么图表可以显示阶梯费率,html - phpStudy
  11. python3库安装_Python3 Requirements库安装过程
  12. KinhDown(度盘PC下载器)
  13. 摩托罗拉e680i手机刷linux开源系统
  14. python开源代码题库管理_GitHub - gnu-xiaosong/Qu_system: 一款开源免费的题库系统程序,高效,安全,功能强大...
  15. C++中的五种构造函数
  16. 小程序emijo表情的正则问题
  17. 基于航空RFID行李处理应用方案
  18. 第4章第15节:图表:使用饼图制作投资公司四季收益图表 [PowerPoint精美幻灯片实战教程]
  19. 一文看懂苹果WWDC20:iOS 14更好玩,可Intel要哭瞎了
  20. 数据分析面试题-面试话术

热门文章

  1. 华为海思总裁凌晨邮件燃爆全国:多年备胎一夜转“正”,今后要科技自立
  2. 悄悄告诉你,在硅谷,有一种工作比程序员挣得多
  3. 披一张机器皮,智能就有了?!
  4. 特斯拉股东要用“独立董事长”换掉马斯克,不过最终失败了
  5. Google惊人研究:一组图片,就能强迫神经网络执行其他任务
  6. mysql数据库优化总结 有图 有用
  7. zabbix的trigger
  8. 重新实现unity3d的Mecanim动画混合 (2) 2D Freeform Cartesian
  9. for循环中的参数能不省略
  10. 项目实战之服务端分页的实现——SQL