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;
}
posted @ 2022-02-11 13:35  蒟蒻xiezheyuan  阅读(33)  评论(0编辑  收藏  举报