1055. 股票买卖 II

贪心模板题
思考这题之前,首先需要明确一点:对于任何买卖操作,即便跨了n天也是一样,都可以拆分成如图的形式
{(at,at+1),(at2,at2+1)....,(atk,atk+1)},这样的集合,即可以拆分成跨度都为1天的小买卖
这样的集合中每项元素可正可负,值即为a(i+1)-a(i)的数值,后一天价格减前一天价格即可得出利润(或损失)
只要,每一项正的元素相加(赢钱的买卖),即可得出最大利润(如此操作不可能有负的小买卖在里面,因为都被分割抛弃了)

默默的说一句,感觉这种贪心可以现场猜,直接写,不用去证明,猜对了就血赚

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5+10;
int n;
int sum;
int a[N];
int main()
{
    cin >> n;
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    for(int i=1;i<n;i++)
    {
        if(a[i]<a[i+1])
        {
            sum+=a[i+1]-a[i];
        }
    }
    cout << sum << endl;
    return 0;
}

 

posted @ 2022-11-24 21:23  风乐  阅读(25)  评论(0)    收藏  举报