P6446TABOVI 贪心 题解
Math_rad_round · · 题解
P6446
题意简述:
给你两个长
每一次操作可以将任意长度的区间每一个数
求把
我们可以想到,我们关心的是
所以可以设
我们可以从左往右慢慢递推
假设在
可以发现,
如果
否则,
依次不断递推,每次将
复杂度空间
AC代码:
#include<iostream>
using namespace std;
int a[100000];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
int a1;
cin>>a1;
a[i]=a1-a[i];
}
int ans=0;
for(int i=1;i<=n;i++){
if(a[i]>0&&a[i-1]>0)ans+=max(0,a[i]-a[i-1]);
else if(a[i]>0&&a[i-1]<=0)ans+=a[i];
else if(a[i]<0&&a[i-1]<0)ans+=max(0,a[i-1]-a[i]);//因为都是负数
else ans+=-a[i];
}
cout<<ans;
}
这题数据是真的水