贪心算法
无固定套路,结论难以证明,需要多做,多种题型
#include<iostream>
using namespace std;
const int N=100000;
int n;
int res;
int a[N];
int find_h(int index){
for(int i=index+1;i<=n;i++){
if(a[i]<a[index]){
index=i;
//更新买入的最小值,如果结尾是最小值,则收入为0
if(i==n) return -1;
}else{
break;
}
}
return index;
}
int find_r(int index){
// 7 1 5 3 6 4
if(index==n){
return -1;
}
for(int i=index+1;i<=n;i++){
if(a[i]>=a[index]){
index=i;
}else{
return index;
}
}
return index;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int h=0;
int r=0;
// 7 1 5 3 6 4
for(int i=1;i<=n;i=r){
h=find_h(i);
//当后面的数为降序排列,直接输出res即可
if(h==-1){
cout<<res;
return 0;
}
//------------------------------------
r=find_r(h);
if(r==-1){
cout<<res;
return 0;
}
res+=a[r]-a[h];
}
cout<<res;
return 0;
}