zoukankan      html  css  js  c++  java
  • 蓝桥杯——X额宝

    题目地址

    题目描述

    【理财有风险,投资需谨慎】 
    Alice计划将自己的所有红包拿去投资。 
    在粗略预测了该理财产品的各日收益后,Alice希望通过一次买卖获得最大的收益。 
    买卖当天均可以享受到当日盈亏,允许一天内先买后卖。 
    希望你帮她计算一下最大盈利。 

    输入

    第一行是样例个数K(1<=K<=100)
    每个样例的第一行是天数N(1<=N<=100)
    第二行包含N个整数Ai(-100<=Ai<=100),表示当天盈亏。

    输出

    对于每个样例,输出一个数字表示Alice的最大盈利。 
    如果该理财产品赚不到钱,她也可以选择不购入此产品,请直接输出0。 

    样例输入 Copy

    4
    3
    1 0 0
    9
    -2 1 -3 4 -1 2 1 -5 4
    6
    -4 -1 5 -4 1 -1
    3
    -9 -9 -6

    样例输出 Copy

    1
    6
    5
    0

    【分析】

    “Alice希望通过一次买卖获得最大的收益“ —— 可能间隔好几天,某天买,另一天卖 。 显然用动态规划做

    先定义一个dp的数组变量,以n为长度,从dp[1]开始进行一次for循环(ps:如果从0开始会导致数组越界),利用max函数判断是当前的a[i]大还是上一个dp加上当前的a[i]之和大,即max(a[i],dp[i-1]+a[i]);找出两者中较大的一个,作为当前dp[i]中的内容【记忆当前最好的情况】。 之后再做一次i从0到9的for循环,找出最终最大的一个和。

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int k,i,n,j;
        scanf("%d",&k);
        for(i=0;i<k;i++)
        {
            scanf("%d",&n);
            int a[n]={0},dp[n]={0};
            for(j=0;j<n;j++)
            {
                scanf("%d",&a[j]);
            }
            int l;
            dp[0]=a[0];
            for(l=1;l<n;l++)
            {
                dp[l]=max(a[l],dp[l-1]+a[l]);
            }
            int m=dp[0];
            for(j=0;j<n;j++)
            {
                m=max(m,dp[j]);
            }
            if(m>0)
            printf("%d
    ",m);
            else
            {
                printf("0
    ");
            }
        }
    }

    # 最近做题越来越吃力了,遇到各种 dfs搜索,dp,没学习就直接上来刷题,效率极低,得改改。

  • 相关阅读:
    iOS OC语言: Block底层实现原理 (转载)
    Objective-C中的Block(闭包) (轉載)
    http://oncenote.com/2015/09/16/Security-2-HTTPS2/ (轉載)
    iOS安全系列之一:HTTPS (轉載)
    Swif基本语法以及与OC比较三
    OC/Swift第三方添加出错解决方法
    Swift基本语法及与OC比较之二
    2015AppStore 上传步骤及常见问题
    使用AJAX日历控件,显示某些日期(CalendarExtender)
    在CheckBox中,仅仅允许选择一项
  • 原文地址:https://www.cnblogs.com/expedition/p/12246480.html
Copyright © 2011-2022 走看看