设最大的利益为maxv,最小值为minv

1.求最大利益的简单算法

 for j从1到n-                                                for(j=;j<=n-;j++)
for i从0到j- for(i=;i<=j-;i++)
maxv =(maxv与R[j]-R[i]中较大的一个)   maxv=max(maxv,R[i]-minv);
  这个算法中,我们将所有满足 i < j 的 i 与 j 的组合全部列了出来,并从中搜索Rj-Ri的最大值maxv。
  这里一定要注意,maxv必须选择一个合适的初始值。由于 Rt ≤ 109,再考虑到最大利益为负的情况,所以maxv的初始值要低于10-9。
或者可以直接将R1-R0作为初始值。
  这个算法虽然可以正确输出,但其时间复杂度高达O(n2),考虑到输入上限( n ≤ 20 000)的问题,会发现当输入较大时,该程序无法在限制之间内完成处理。
一次我们需要研究一种更高效的办法。 

2.求最大利益的改良算法

 minv = R[]                                                minv = R[];
for j从1从n- for(j=;j<n;j++)
maxv =(maxv与R[j]-minv之间较大的一个)   maxv = max(maxv,R[j]-minv);
minv =(minv与R[j]之间较小的一个) minv = min(minv,R[j]);

  原先的简单算法是关于n的二重循环,时间复杂度为O(n2)。经过我们改良之后,算法中仅包含一个循环,时间复杂度降至O(n)。

另外,改良后的算法不需要将输入的数据保留在数组中,因此同时改善了内存使用量。

例题

输入 第一行输入整数n。接下来n行依次给整数Rt(t = 0,1,2,······,n-1)赋值。
输出 在单独的一行中输出最大值。
限制 2 ≤ n ≤ 200 000
1 ≤ Rt ≤ 109
 

输入示例1


输出示例1
3
 
输入示例2

输出示例2

-

C++代码

 #include <bits/stdc++.h>
using namespace std;
static const int MAX = ;
int main()
{
int R[MAX],n;
cin>>n;
for(int i=;i<n;i++)
cin>>R[i];
int maxv= -;
int minv= R[];
for(int i=;i<n;i++)
{
maxv=max(maxv,R[i]-minv);
minv=min(minv,R[i]);
}
cout<<maxv<<endl;
return ;
}
 

ACM入门问题:最大利益问题的更多相关文章

  1. 大牛对ACM入门菜鸟的一些话

    首先就是我为什么要写这么一篇日志.原因很简单,就是因为前几天有个想起步做ACM人很诚恳的问我该如何入门.其实就现在而言,我并不是很想和人再去讨论这样的话题,特别是当我发现我有很多的东西要学的时候,我实 ...

  2. ACM入门步骤(一)

    一般的入门顺序: 0. C语言的基本语法(或者直接开C++也行,当一个java选手可能会更受欢迎,并且以后工作好找,但是难度有点大),[参考书籍:刘汝佳的<算法竞赛入门经典>,C++入门可 ...

  3. ACM入门指南

    本文已经转移到了:http://harryguo.me/2015/11/03/ACM-%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/ 什么是ACM? 想必打开这篇博客的人已 ...

  4. acm入门 杭电1001题 有关溢出的考虑

    最近在尝试做acm试题,刚刚是1001题就把我困住了,这是题目: Problem Description In this problem, your task is to calculate SUM( ...

  5. ACM 入门计划

    acm 本文由swellspirit贡献 ACM • I can accept failure. but I can't accept not trying. Life is often compar ...

  6. ACM入门之OJ~

    所谓OJ,顾名思义Online Judge,一个用户提交的程序在Online Judge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等.用户程序执行的结果将被Online ...

  7. 杭电OJ:1089----1096(c++)(ACM入门第一步:所有的输入输出格式)

    1089:输入输出练习的A + B(I) 问题描述 您的任务是计算a + b. 太容易了?!当然!我专门为ACM初学者设计了这个问题. 您一定已经发现某些问题与此标题具有相同的名称,是的,所有这些问题 ...

  8. ACM入门

    1.给n个数字,将它们重新排序得到一个最大的数字 例子 4123 124 56 90--------------90561241235123 124 56 90 9------------990561 ...

  9. acm入门编成题

    http://wenku.baidu.com/view/c8f2f64acf84b9d528ea7aee.html

随机推荐

  1. Pormetheus(一)

    (1)Prometheus由来普罗米修斯的灵感来自于谷歌的Borgmon.它最初是由马特·t·普劳德(Matt T. Proud)作为一个研究项目开发的,普劳德曾是谷歌(google)的一名雇员.在普 ...

  2. Continue 和 Break

    1.什么是continue和break continue:继续的.持续的 break:冲断的.折断的 作用:用于终止循环体,主要用于switch条件语句和循环体条件语句(for.while.do-wh ...

  3. 第三章:shell变量知识进阶

    特殊变量:位置变量大于9的时候,需要加上(),例如$(10)$*获取脚本的所有参数,如果不加""和$@是一样的效果,如果加上"",则表示所有参数组成一个字符串$ ...

  4. CSS躬行记(6)——滤镜

    滤镜(filter)可改造元素的视觉呈现,CSS内置的滤镜有10种,通过SVG文件还能自定义滤镜. 一.调色滤镜 调色滤镜可控制元素的模糊.颜色.亮度等变化,并且多个滤镜可组合在一起使用.这些滤镜大部 ...

  5. F - Bone Collector

    Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like ...

  6. 详解 迭代器 —— Iterator接口、 ListIterator接口 与 并发修改异常

    (请关注 本人"Collection集合"博文--<详解 Collection集合>) Iterator接口(迭代器): 概述: 对 collection 进行迭代的迭 ...

  7. C#集合类型——Hashtable、Dictionary之浅谈

    Hashtable表 数组.数组集合.List集合都是通过索引来访问里面成员.哈希表则是通过键来访问成员值.键不可为空,值可为空. 比如: Hashtable  hash=new  Hashtable ...

  8. mac 使用记录

    iterm 配合 lrzsz 实现 上传下载

  9. Mysql表的对应关系

    表关系 一对一一张表中的一条记录与另一张表中最多有一条明确的关系:通常,此设计方案保证两张表中使用同样的主键即可假设一张学生表:id 姓名 年龄 性别 籍贯 婚否 住址那么姓名 年龄 性别 这种字段比 ...

  10. 2019-2020-1 20199310《Linux内核原理与分析》第七周作业

    1.问题描述 在前面的文章中,学习了系统调用system_call的处理过程,在MenuOS中运行getpid命令,通过gdb跟踪调用time函数的过程,并分析system_call代码对应的工作过程 ...