P4393 [BOI2007]Sequence 序列问题
简要题意
对于一个序列 \(a\) 的元素 \(a_i\),存在一个操作 \(\text{reduce}\)。可以把元素 \(a_i\) 与 \(a_{i-1}\) 压缩成 \(\max \{ a_i,a_{i-1}\}\),该操作的代价是 \(\max \{ a_i,a_{i-1}\}\),求把这个序列变成长度为 \(1\) 的序列时,所需要的最小代价。
分析
简单动态规划/贪心
考试时由于没加long long
以及正确方程被我自己排除了。导致就爆0了。
考完了觉得还是很简单的。
方程其实就是 :
\[\sum_{i=2}^{n} \max \{ a_i,a_{i-1} \}
\]
因为找规律可以知道,直接一个一个合并永远是最优的。
代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,result;
int a[1000005];
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=2;i<=n;i++){
result+=max(a[i],a[i-1]);
}
cout<<result<<endl;
return 0;
}