5019.3078.1969解题报告

无秒

2020-05-15 19:00:37

Personal

其实就是一个贪心。当去除1排时,我们肯定能想到去除要去的最多,那如何做呢?设有a[i],如果a[i]>a[i-1],那么去除a[i-1]时肯定会连带a[i],所以要多去除的就是a[i]-a[i-1],所以用一个for循环就欧克了。 PS:这些题都是一样的,所以一起给水了…… ```cpp #include<cstdio> #include<iostream> #include<cmath> using namespace std; int n,a[100003]; unsigned long long ans; inline void read(int &x) { x=0; int f=0; char ch=getchar(); while(!isdigit(ch)) f|=(ch=='-'),ch=getchar(); while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); x=f?-x:x; } inline void write(int x) { char s[30];int top=0; while(x) s[++top]=x%10,x/=10; if(!top) putchar('0'); else while(top) putchar(s[top--]+'0'); } int main() { read(n); for(int i=1;i<=n;i++) read(a[i]); a[0]=0; for(int i=1;i<=n;i++) if(a[i]>a[i-1]) ans+=a[i]-a[i-1]; write(ans); return 0; } ```