贪心算法-数列极差问题

【题目描述】

在黑板上写了N个正整数做成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,最大的max,最小的为min,则该数列的极差定义为M=max-min。

编程任务:对于给定的数列,编程计算出极差M。

输入输出样例:

输入:

4

2 1 4 3

输出:

13

【算法分析】

当看到此题时,我们会发现求max与求min是两个相似的过程。若我们把求解max与min的过程分开,着重探讨求max的问题。

下面我们以求max为例来讨论此题用贪心策略求解的合理性。

讨论:假设经(N-3)次变换后得到3个数:a ,b , max'(max'≥a≥b),其中max'是(N-2)个数经(N-3)次f变换后所得的最大值,此时有两种求值方式,设其所求值分别为 z1,z2,则有:z1=(a×b+1)×max'+1,z2=(a×max'+1)×b+1所以z1-z2=max'-b≥0若经(N-2)次变换后所得的3个数为:m,a,b(m≥a≥b)且m不为(N-2)次变换后的最大值,即m<max'则此时所求得的最大值为:

z3=(a×b+1)×m+1此时z1-z3=(1+ab)(max'-m)>0 所以此时不为最优解。

所以若使第k(1≤k≤N-1)次变换后所得值最大,必使(k-1)次变换后所得值最大(符合贪心策略的特点2),在进行第k次变换时,只需取在进行(k-1)次变换后所得数列中的两最小数p,q施加f操作:p←p×q+1,q←∞即可(符合贪心策略特点1),因此此题可用贪心策略求解。在求min时,我们只需在每次变换的数列中找到两个最大数p,q施加作用 f:p←p×q+1,q←-∞即可.原理同上。

这是一道两次运用贪心策略解决的一道问题,它要求选手有较高的数学推理能力。

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int N = sc.nextInt();int [] n = new int[N];int max,min;for (int i = 0; i < N; i++) {n[i] = sc.nextInt();}int[] nclone = n.clone();//拷贝一次数组,因为有两次操作,分别求max和min。//求出MAX:int m = 0;while(m != N-1){for (int i = m; i < m+2; i++) {//循环为m到m+2,因为每次只要求出两个最小的值。for (int j = i+1; j < n.length; j++) {if(n[j]<n[i]){int temp = n[j];n[j] = n[i];n[i] = temp;}}if(i==m+1){n[i] = n[i-1]*n[i]+1;}}m++;}max = n[N-1];//求出MIN:m = 0;//重新初始化m。while(m != N-1){for (int i = m; i < m+2; i++) {for (int j = i+1; j < nclone.length; j++) {if(nclone[j]>nclone[i]){//事实上只是将小于号改为大于号即可。int temp = nclone[j];nclone[j] = nclone[i];nclone[i] = temp;}}if(i==m+1){nclone[i] = nclone[i-1]*nclone[i]+1;}}m++;}min = nclone[N-1];//MAX - MIN :System.out.println(max - min);}
}

编程的思路:

每次排序仅排除最小(或最大)的两个数,然后将二者运算的结果放在第二个数的位置,然后从第二个数的位置开始往后排序,重复上述过程。最后得到数组最末尾的那个数就是运算的MAX(或MIN)的结果。MAX-MIN即可得解。

贪心算法-数列极差问题-JAVA相关推荐

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

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

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

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

  3. 【贪心】数列极差问题

    题目描述 "我就说你在忽悠我吧,我刚才问了昆士兰大学的好多魔法师,他们根本就没有一个人想过做什么时间旅行的实验,但搞笑的是,他们居然对你的理论很感兴趣,想找个时间和你做进一步的讨论.哎,我还 ...

  4. java零钱换整程序_贪心算法换零钱(java)

    贪心算法思想 贪心算法总是做出在当前看来做好的选择.也就是说贪心算法并不从整体最后考虑,他做出的选择只是局部最优选择.他所做出的仅是在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解, ...

  5. 贪心算法之柠檬水java

    贪心算法的基本思想: 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,它所做出的仅是在某种意义上的局部最优解.用局部解构造全局解,即从问题的某一个初始解逐 ...

  6. java编程贪心算法背包问题,贪心算法----部分背包问题(java实现)

    部分背包问题 给定 n 种物品和一个背包.物品 i 的重量是 Wi,其价值为 Vi,背包的容量为 C.在选择物品 i 装入背包时,可以选择物品 i 的一部分,1<= i <=n.问应如何选 ...

  7. Prim算法实现最小生成树(Java)

    最小生成树包含n个顶点和(n-1)条边,并且边的权重最小.Prim算法的思想是:由一颗小树慢慢长大,首先分为两个顶点集合,最小生成树的顶点集合A,和不在生成树中的顶点集合B,每次从B中找一个顶点v,使 ...

  8. python贪心算法最短路径_dijkstra算法(贪心算法)——解决最短路径问题

    最短路径 给定一张带权图和其中的一个点(作为源点),求源点到其余顶点的最短路径 基本思想 1)源点u,所有顶点的集合V,集合S(S中存有的顶点,他们到源点的最短路径已经确定,源点u默认在S中),集合V ...

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

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

最新文章

  1. 2008年北大核心有效期 计算机类核心(2011-01-31 15:02:46)
  2. HDU 1544 Palindromes(回文子串)
  3. 怎么获取html页面追加,添加df.to_html格式()到现有的HTML页面
  4. 身份证校验原理和PHP实现
  5. FileChannel应用实例——本地文件读数据
  6. 三角形内随机生成一个点
  7. 面试时如何介绍自己的项目经验
  8. php+页面加载进度,基于jQuery实现模拟页面加载进度条_jquery
  9. 基于c语言的学生成绩管理系统论文,C语言学生成绩管理系统论文
  10. 三种常见的ps删除通道的操作
  11. 《我的团长我的团》书及电视剧观后感
  12. html背景图片自动铺满屏幕,【CSS背景图片页面自适应充满屏幕】
  13. html5 数据库 视图,创建视图的sql语句是什么
  14. DAS Over FC 技术允许 ATTO 分解存储并完成 vSAN 认证套件
  15. js文件 本地 上传服务器地址,js 本地文件同步服务器地址
  16. Jedis使用lua脚本完成令牌桶限流
  17. 车载以太网 - SomeIP - 详细解析 - 02
  18. 【python量化】国内外基于python开发的量化回测框架
  19. html设置字体facename,CRichEdit控件操作使用
  20. 小孩学计算机的电视剧,小时候在教育频道看的一个电视剧,好像是叮当演的,讲一堆小孩学唱戏之类的...

热门文章

  1. 数字化驱动全价值链卓越运营
  2. 【Linux】2020配置firefox +geckodriver + selenium 安装及报错解决办法:no DISPLAY environment variable specified
  3. 从键盘输入一个4x4整数矩阵,以主对角线为对称轴,将右上角元素中较大元素代替左下角对应元素,并将左下角元素
  4. 矩阵的翻转与旋转()(另附代码)
  5. 制作DOS的U盘启动
  6. 51单片机学习笔记【七】——蜂鸣器和继电器
  7. IT人员转行写小白文可以么?
  8. 香港进入5G时代!多功能智能灯柱试验计划为5G建设作配合
  9. git pull 时显示Filename too long的解决办法
  10. Automatic Targetless Extrinsic Calibration of Multiple 3D LiDARs and Radars