Codeforces LATOKEN Round 1 (Div. 1 + Div. 2) B. Histogram Ugliness(贪心)
Posted issue是fw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces LATOKEN Round 1 (Div. 1 + Div. 2) B. Histogram Ugliness(贪心)相关的知识,希望对你有一定的参考价值。
Ⅰ.对于 a i a_i ai来说,若满足 a i > a i − 1 & & a i > a i + 1 a_i>a_{i-1}\\&\\&a_i>a_{i+1} ai>ai−1&&ai>ai+1
那么把 a i a_i ai减小到 m a x ( a i − 1 , a i + 1 ) \\rm max(a_{i-1},a_{i+1}) max(ai−1,ai+1)不会使答案变得更差
因为花费一次操作机会代价加一,却能使代价减少 2 2 2,收益和为 − 1 -1 −1
Ⅱ.若比两边都小,操作一次代价加一,另外会使代价加 2 2 2,收益和为 + 3 +3 +3
Ⅲ.若一大一小,操作一次代价加一,另外使代价不变,收益和为 + 1 +1 +1
发现只有操作Ⅰ划算,且操作Ⅰ不会影响其他位置使用操作Ⅰ,所以贪心即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 4e5+10;
int t,n,a[maxn],b[maxn];
signed main()
{
cin >> t;
while( t-- )
{
cin >> n;
for(int i=1;i<=n;i++) cin >> a[i];
a[0] = a[n+1] = 0;
int ans = 0;
for(int i=1;i<=n;i++)
{
if( a[i]>a[i-1] && a[i]>a[i+1] ) b[i] = max( a[i-1],a[i+1] );
else b[i] = a[i];
ans += abs( b[i]-b[i-1] )+a[i]-b[i];
}
cout << ans+b[n] << endl;
}
return 0;
}
以上是关于Codeforces LATOKEN Round 1 (Div. 1 + Div. 2) B. Histogram Ugliness(贪心)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces LATOKEN Round 1 (Div. 1 + Div. 2)
Codeforces LATOKEN Round 1 (Div. 1 + Div. 2) E. Lost Array(构造)
Codeforces LATOKEN Round 1 (Div. 1 + Div. 2) B. Histogram Ugliness(贪心)
Codeforces LATOKEN Round 1 (Div. 1 + Div. 2) D. Lost Tree(交互,二分/图,思维)
D. Lost Tree树的二分图性质——Codeforces LATOKEN Round 1 (Div. 1 + Div. 2)
D. Lost Tree树的二分图性质——Codeforces LATOKEN Round 1 (Div. 1 + Div. 2)