Sequence(BZOJ-1345)
生活随笔
收集整理的這篇文章主要介紹了
Sequence(BZOJ-1345)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Problem Description
對于一個給定的序列a1,…,an,我們對它進行一個操作reduce(i),該操作將數列中的元素ai和ai+1用一個元素max
(ai,ai+1)替代,這樣得到一個比原來序列短的新序列。這一操作的代價是max(ai,ai+1)。進行n-1次該操作后,
可以得到一個長度為1的序列。我們的任務是計算代價最小的reduce操作步驟,將給定的序列變成長度為1的序列。
Input
第一行為一個整數n( 1 <= n <= 1,000,000 ),表示給定序列的長度。
接下來的n行,每行一個整數ai(0 <=ai<= 1, 000, 000, 000),為序列中的元素。
Output
只有一行,為一個整數,即將序列變成一個元素的最小代價。
Sample Input
3
1
2
3
Sample Output
5
思路:貪心
對于 n 個數,每次將相鄰的兩個數,取他們的最大,依次類推,最后得到的一定是最小值
Source Program
#include<iostream> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include<utility> #include<stack> #include<queue> #include<deque> #include<vector> #include<set> #include<map> #define PI acos(-1.0) #define E 1e-6 #define INF 0x3f3f3f3f #define N 2000001 #define LL long long const int MOD=998244353; const int dx[]={-1,1,0,0}; const int dy[]={0,0,-1,1}; using namespace std; LL a[N]; int main(){int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);LL res=0;for(int i=1;i<=n-1;i++)res+=max(a[i],a[i+1]);printf("%lld\n",res);return 0; }?
總結
以上是生活随笔為你收集整理的Sequence(BZOJ-1345)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 挑战NPC(洛谷-P4258)
- 下一篇: 计算几何 —— 二维几何基础