对于相邻的两个位置,假设高度分别为
h
1
,
h
2
h1, h2
h1,h2,那么所需的操作数即为
(
m
i
n
(
h
1
,
h
2
)
−
1
)
+
a
b
s
(
h
1
−
h
2
)
(min(h1, h2) - 1) + abs(h1 - h2)
(min(h1,h2)−1)+abs(h1−h2)。
换种方式,我们可以认为是:无论右面
h
2
h2
h2 如何,当遇到
h
1
h1
h1 的时候,我们至少要保证
h
1
h1
h1 达到目的状态。那么对于
h
2
h2
h2 而言,如果
h
2
<
=
h
1
h2 <= h1
h2<=h1,那么在对
h
1
h1
h1 操作的时候,实际上就已经帮
h
2
h2
h2 完成了操作;如果
h
2
>
h
1
h2 > h1
h2>h1,那么此时再对
h
2
h2
h2 进行额外高度差的操作即可。
#include<bits/stdc++.h>usingnamespace std;intmain(){int t; cin >> t;while(t--){int n; cin >> n;int ans =0;int pre =1;int x;for(int i =1; i <= n;++i){
cin >> x;if(x <= pre){
pre = x;continue;}
ans += x - pre;
pre = x;}
cout << ans << endl;}return0;}
#include<bits/stdc++.h>#define N 100005longlong f[N],a[N];intmain(){longlong t;
cin >> t;longlong num =0;while(t--){longlong n;
cin >> n;
num += n;longlong sum =0;for(longlong i =0; i < n;++i){
cin >> a[i];if(i)
f[i]= a[i]- a[i -1];else
f[i]= a[i];if(f[i]>0)
sum += f[i];}
cout << sum -1<< endl;}}