题目描述

2130年,股神巴菲特投胎了!他投胎到你身上!

你作为股神转世,能力比原股神还要强,你可以预测到今后n天的股价。假设刚开始你的手上有1元钱,你想知道n天后你最多可以赚到多少钱。作为股神转世,你准备自己编程算答案。

每一天你都可以买股票、卖股票,当然也可以什么都不干。(到那时股票可以买卖分数股)

输入输出格式

输入格式

第一行一个数n(n≤1000000)。接下来n行,每行一个小数,代表每天的股价。

输出格式

一个数,代表最多能赚多少钱。(答案四舍五入,保留整数)

样例

INPUT

2

2.00

3.00

OUTPUT

2

HINT

样例解释 Sample Explanation:

第一天有现金1元,股价2.00元,可以买入0.5股;第二天股价3.00元,全部卖出,得现金:0.5*3.00=1.50元,四舍五入后金额为2。

SOLUTION

贪心

一开始我还想一堆乱七八糟的解法,单调性,最长子序列,什么价格一下跌就卖啥的,但是都觉得很奇怪,都可以轻松被自己hack掉,于是瞄了一眼AC的人的评测状态,woc,代码都这么短的吗???但还是没有思路。

最后还是戳了题解看。非常简单的做法。

我们保存两个值,一个是当前可以赚的钱数的最大值,另一个是当前可以持有股份的最大值。因为我们的操作非常单一,只有买进,卖出两种。所以我们要用手上的钱去在合适的时候买进卖出利滚利滚利滚利。

本题利用到了“可以买入,卖出,或者什么也不干”这个性质,于是用最优值更新相当于就是从上一次更新到下一个最优值的出现期间不做任何操作,从而保证可以用最优创造一个新的最优。

  1. #include <iostream>
  2. #include <cstdio>
  3. using namespace std;
  4. #define Min(a,b) ((a<b)?a:b)
  5. #define Max(a,b) ((a>b)?a:b)
  6. double hv=0,ans=1;
  7. int main(){
  8. int i,n;
  9. scanf("%d",&n);
  10. for (i=1;i<=n;++i){double x;
  11. scanf("%lf",&x);
  12. double rec=Max(ans,hv*x);//记录如果现在全部卖出的话的钱数
  13. hv=Max(hv,ans/x);ans=rec;//记录如果用历史最大钱数来买的话能卖多少
  14. }
  15. printf("%0.0lf",ans);
  16. return 0;
  17. }

GYOJ_1812_股票(stock)的更多相关文章

  1. 六.Spring与RabbitMQ集成--stock trading(股票交易系统)

    周末继续写博客,算起来,关于rabbitMQ这个中间件的研究已经持续至两个星期了,上一篇文章使用sring amqp实现了同步和异步的消息接收功能.这一节继续实用spring amqp实现一个股票交易 ...

  2. 使用JSON数据格式模拟股票实时信息

    JQueryStock.html <!DOCTYPE html> <head> <meta charset="UTF-8"> <title ...

  3. Spring 事务详解

    实现购买股票案例: 一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: ? 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  4. Spring事务之详解--三种实现方式

    实现购买股票案例: 一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: /* * 账户 */ public class Accoun ...

  5. Spring 事务

    实现购买股票案例: 一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  6. 一些sql语句的常用总结(重要)

    select primary_flag from tc_contact where primary_flag !=0 select dept_id,dept_name,tree_level,tree_ ...

  7. Spring事务-三种实现方式

    一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  8. DL4J之CNN对今日头条文本分类

    一.数据集介绍 数据来源:今日头条客户端 数据格式如下: 6551700932705387022_!_101_!_news_culture_!_京城最值得你来场文化之旅的博物馆_!_保利集团,马未都, ...

  9. Python1--简介及基础语法

    0. 简介 Python易于学习的编程语言,有很多现成的第三方库可以调用,不用重复造轮子,老话说:"人生苦短,我用 Python" 1. 安装Python Mac:brew ins ...

随机推荐

  1. PAT Advanced 1081 Rational Sum (20) [数学问题-分数的四则运算]

    题目 Given N rational numbers in the form "numerator/denominator", you are supposed to calcu ...

  2. PAT Advanced 1008 Elevator (20) [数学问题-简单数学]

    题目 The highest building in our city has only one elevator. A request list is made up with N positive ...

  3. python编程:从入门到实践----第五章:if语句>练习

    5-1 条件测试 :编写一系列条件测试:将每个测试以及你对其结果的预测和实际结果都打印出来. a. 详细研究实际结果,直到你明白了它为何为True 或False b. 创建至少2个测试,且其中结果分别 ...

  4. protobuf编译工具使用

    1.下载,配置环境变量 下载地址:https://github.com/google/protobuf/releases,选择protoc-xxx-win64.zip下载 把.exe文件的位置加入到P ...

  5. miniconda安装jupyter

    1.安装jupyter 由于miniconda是anaconda的简化版,只有一个prompt: 安装jupyter,只需要打开prompt的dos窗口,输入命令pip install jupyter ...

  6. java8的lambda过滤list遍历集合,排序

    1.根据属性过滤list List<AllManagerBean> testLists = broadCastRoomMapper.allManagerlist(); List<Al ...

  7. sklearn连续型数据离散化

    二值化 设置一个condition,把连续型的数据分类两类.比如Age,大于30,和小于30. from sklearn.preprocessing import Binerize as Ber x ...

  8. HTTP Error 502.5 - Process Failure 解决方案

    .netcore 2.1.4的程序部署到IIS后报以下错误: ======================================================= HTTP Error 50 ...

  9. CodeForces 1006E Military Problem(DFS,树的选择性遍历)

    http://codeforces.com/contest/1006/problem/E 题意: 就是给出n,m,共n个点[1,n],m次询问.第二行给出n-1个数a[i],2<=i<=n ...

  10. 图之强连通--Tarjan算法

    强连通分量 简介 在阅读下列内容之前,请务必了解图论基础部分. 强连通的定义是:有向图 G 强连通是指,G 中任意两个结点连通. 强连通分量(Strongly Connected Components ...