设最大的利益为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 ≤ R≤ 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. CVE-2019-0232 远程代码执行漏洞-复现

    0x00 漏洞介绍 该漏洞是由于Tomcat CGI将命令行参数传递给Windows程序的方式存在错误,使得CGIServlet被命令注入影响. 该漏洞只影响Windows平台,要求启用了CGISer ...

  2. 怎么高效学习python?其实只需要这个方法,快速掌握不叫事儿

    很多人想学python,并且希望能快速高效的学习python,但一直都没有找到合适的方法,下面谈一下我的方法. 首先,高效入门python 怎么高效学习python?想要高效,就要先搞清楚你这个阶段, ...

  3. Kafka 2.5.0发布——弃用对Scala2.11的支持

    近日Kafka发布了最新版本 2.5.0,增加了很多新功能: 下载地址:https://kafka.apache.org/downloads#2.5.0 对TLS 1.3的支持(默认为1.2) 引入用 ...

  4. 给我Python几十行代码,我还你一个微信聊天助手

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 故事胶片 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

  5. 猜数字和飞机大战(Python零基础入门)

    前言 最近有很多零基础初学者问我,有没有适合零基础学习案例,毕竟零基础入门的知识点是非常的枯燥乏味的,如果没有实现效果展示出来,感觉学习起来特别的累,今天就给大家介绍两个零基础入门的基础案例:猜数字游 ...

  6. asp.net mvc 接收jquery ajax发送的数组对象

    <script type="text/javascript"> $(function () { var obj = { name: "军需品", m ...

  7. 全网最全最细的jmeter接口测试教程以及接口测试流程详解

    一.Jmeter简介 ​ Jmeter是由Apache公司开发的一个纯Java的开源项目,即可以用于做接口测试也可以用于做性能测试. Jmeter具备高移植性,可以实现跨平台运行. Jmeter可以实 ...

  8. 常见分布式全局唯一ID生成策略

    全局唯一的 ID 几乎是所有系统都会遇到的刚需.这个 id 在搜索, 存储数据, 加快检索速度 等等很多方面都有着重要的意义.工业上有多种策略来获取这个全局唯一的id,针对常见的几种场景,我在这里进行 ...

  9. 关于json转义中文

    服务器传递或者程序传递中,不识别读取到的JSON数据中 \u开头的数据. PHP 生成JSON的时候,必须将汉字不转义为 \u开头的UNICODE数据. 网上很多,但是其实都是错误的,正确的方法是在j ...

  10. 不论是 Basic Auth 还是 Digest Auth,都会有 Authorization 字段

    GET /dir/index.html HTTP/1.0 Host: localhost Authorization: Digest username="Mufasa", real ...