https://www.acwing.com/problem/content/1057/
写复杂了。。。
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int q[N];
int result[N];
int main()
{
int n; cin>>n;
for(int i=0;i<n;i++) cin>>q[i];
int pre=q[0],res=0;
bool flag=false;
for(int i=0;i<n-1;i++)
{
flag=false;
if(q[i]>q[i+1])//7 1 5 3 6 4
// 1-6<1-5-3-6
{
flag=true;
res=res+q[i]-pre;
pre=q[i+1];
}
if(q[i]<pre) pre=q[i];
}
res=res+q[n-1]-pre;
cout<<res<<endl;
return 0;
}
代码2比代码1多想了一步一直增的情况,只用看首位与中间无关
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100010;
int n;
int price[N];
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i ++ ) scanf("%d", &price[i]);
int res = 0;
for (int i = 0; i + 1 < n; i ++ )
{
int dt = price[i + 1] - price[i];
if (dt > 0)
res += dt;
}
printf("%d\n", res);
return 0;
}
另附dp写法