题目描述

“我就说你在忽悠我吧,我刚才问了昆士兰大学的好多魔法师,他们根本就没有一个人想过做什么时间旅行的实验,但搞笑的是,他们居然对你的理论很感兴趣,想找个时间和你做进一步的讨论。哎,我还以为他们和我一样聪明呢,想不到这么容易上当受骗。”小墨老师摆出一幅你骗不了我的表情。

“唉,你太自以为是了,这样吧,你先把这道数列极差问题发给他们,如果他们能有所领悟,那我会找时间和他们讨论一下时间旅行的可行性的。”李旭琳边说边在黑板上写了N个正整数组成的一个数列,并进行如下操作:每次擦去其中的两个数a和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,最大的为max,最小的为min,则该数列的极差定义为M=max-min。

现在请你编程,对于给定的数列,计算极差。

输入

输入包含多个测试集。每个测试集的第一个数N表示 正整数序列长度(0≤N≤50000),随后是N个正整数。N为0表示输入结束。

输出

每个结果一行。

样例输入

3
1 2 3
0

样例输出

2

首先这个题如果拿出几个测试案例来看的话,容易推导出这是一道贪心题,就拿本题的测试案例来看,1 2 3 这三个数有三种不同的操作顺序

1:(1*2+1)*3+1=10

2:(1*3+1)*2+1=9

3:(2*3+1)*1+1=8

从中我们容易发现这样的顺序,如果要求最大值的话,那么每次先用最小的连个数相乘的结果+1,相反,如果要求最小值的话,每次先用最大的两个数相乘的结果+1.这样我们就可以写算法啦

#include<iostream>
#include<algorithm>
using namespace std;
//定义两个数组用于求最大和最小值得时候使用int s[50001];int j[50001];int cmp(int a,int b){return a>b;}
int main(){int n;while(cin>>n&&n){for(int i=0;i<n;i++){cin>>s[i];j[i]=s[i];}//先升序排列sort(s,s+n);for(int i=1;i<n;i++){s[i]=s[i]*s[i-1]+1;//从小到大排完序之后,先从前边最小的两个数相乘然后存放到数组里sort(s+i,s+n);/*算法的核心部分,由于每次从最小的两个数相乘后的数值放到原来的数组中有可能会破坏数组从小到大的顺序,所以再用一个sort排序,使新的数组变得有序,依次循环下去,就会得到最大值。*/}int max=s[n-1];//降序排列并求最小值sort(j,j+n,cmp);for(int i=1;i<n;i++){j[i]=j[i-1]*j[i]+1;/*而求最小值的时候就不用sort每次都排序啦,因为前边两个最大的数乘起来的数不可能会比后边小的数还要小,所以求最小值得时候会比上边要简单一些*/}int min=j[n-1];
cout<<max-min<<endl;}
return 0;
}

【贪心】数列极差问题相关推荐

  1. 贪心算法基础(一)——数列极差

    贪心算法的思想就是用局部的最优解,达到最后全局的最优解.贪心算法使用是有限制的,一个问题能不能使用贪心来做,往往我们要对其进行必要的证明.贪心算法策略具有无后向性,也就是当前阶段的状态确定之后,不受后 ...

  2. 贪心算法-数列极差问题-JAVA

    贪心算法-数列极差问题 [题目描述] 在黑板上写了N个正整数做成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上剩下一个数,在所有按这种操作 ...

  3. 贪心算法-数列极差问题(对前篇文章的修改)

    package com.work.home_3_1; import java.util.Arrays; /**  * 贪心算法-数列极差问题  * 1. 问题描述:  *         N个正数数列 ...

  4. 算法4:数列极差问题(贪心算法)

    文章目录 问题描述: 代码及说明 问题描述: 在黑板上写了N个正整数作成的一个数列,进行如下操作: 每次擦去其中的两个数a和b,然后在数列中加入一个数a*b+1,如此下去直到黑板上剩下一个数,在所有按 ...

  5. 数列极差问题(c语言实现)

    4.1题目 算法实现题4-13 数列极差问题 ★问题描述:在黑板上写了N个正数组成的一个数列,进行如下操作:每一次擦去其中2个数,设为a和b,然后在数列中加入一个数ab+1,如此下去直至黑板上只剩下一 ...

  6. 贪心算法——数列极差

    题目描述 佳佳的老师在黑板上写了一个由 n 个正整数组成的数列,要求佳佳进行如下操作:每次擦去其中的两个数 a 和 b,然后在数列中加入一个数 a×b+1,如此下去直至黑板上剩下一个数为止,在所有按这 ...

  7. 贪心算法:数列极差问题

    问题: 问题描述:在黑板上写了N个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a*b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中, ...

  8. 求数列极差(贪心算法)

    题目描述] 在黑板上写了N个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,最大的 ...

  9. 数列极差(信息学奥赛一本通-T1427)

    [题目描述] 在黑板上写了N个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,最大 ...

最新文章

  1. 《数据分析思维手册.pdf》,真的强!
  2. BZOJ1895Pku3580 supermemo——非旋转treap
  3. 高斯滤波/高斯平滑/高斯模糊的实现及其快速算法(Gaussian Filter, Gaussian Smooth, Gaussian Blur, Fast implementation)
  4. 2019数字中国创新大赛西安(分区)、北京(分区) 决赛 观看总结
  5. 电脑图标出现蓝色问号解决方法
  6. 计算机教学考核方案,计算机专业技能课教学目标考核方案_图文.pdf
  7. java中eof错误是啥意思_EOFException异常详解
  8. ElasticSearch 参数调优
  9. 金蝶生成凭证模板_金蝶精斗云产品的优势
  10. 推荐一款截图神器——FSCapture
  11. 《Arduino》开发 之 基于 u8g2 库 的 OLED 菜单界面
  12. html交叉轴排列,CSS Flex 交叉轴水平方向
  13. JavaScript实现二代身份证号码转一代身份证号码
  14. 易航网址引导系统 - 一款极其优雅的网址引导系统+内置16套主题和防墙防举报插件
  15. 图论基础知识(一) —— 图
  16. 计算机应用基础高等教育自学考试00018,00019备考知识点
  17. 信号归一化功率_大功率集总参数衰减器的稳定性分析
  18. 洛谷试题: 采药 解法
  19. 浅析担保机构的经营和风险控制
  20. BananaPi上ov5640摄像头自动对焦功能的实现

热门文章

  1. QDir::SortFlag
  2. redis之持久化机制
  3. 嵌入式--基于AD15的原理图及PCB绘制基础知识
  4. 搜索练习2(P1123取数游戏)
  5. 为了入职大厂,我是如何学会python自动化,年轻就要一直拼
  6. [SQL-码农]SQL server 无法打开数据库 'msdb'。恢复操作已将该数据库标记为 SUSPECT
  7. vue前端UI框架整理
  8. HTML制作员工信息登记表
  9. mapbox-gl加载气象场数据(视频)
  10. 日历控件QCalendarWidget