题意简述:
有一个序列,你可以一次将一个连续的段-1,但是不能让一个段变成0,求最小变成全零的操作次数。
方法有很多,个人的做法是差分以后把所有正值加起来。
没有细节,NOIP2013原题,完全就是为了送分。
感谢良心出题人。
#include<iostream>
#include<cstdio>
int n,a[100010],da[100010];
void init(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",a+i);
}
for(int i=1;i<=n;++i){
da[i]=a[i]-a[i-1];
}
int sm=0;
for(int i=1;i<=n;++i){
da[i]=std::max(da[i],0);
sm+=da[i];
}
printf("%d\n",sm);
}
int main(){
init();
return 0;
}