對於乙個給定的序列a1, …, an,我們對它進行乙個操作reduce(i),該操作將數列中的元素ai和ai+1用乙個元素max(ai,ai+1)替代,這樣得到乙個比原來序列短的新序列。這一操作的代價是max(ai,ai+1)。進行n-1次該操作後,可以得到乙個長度為1的序列。我們的任務是計算代價最小的reduce操作步驟,將給定的序列變成長度為1的序列。
第一行為乙個整數n( 1 <= n <= 1,000,000 ),表示給定序列的長度。接下來的n行,每行乙個整數ai(0 <=ai<= 1, 000, 000, 000),為序列中的元素。
只有一行,為乙個整數,即將序列變成乙個元素的最小代價。31
23 530%的測試資料 n<=500;
50%的測試資料 n <= 20,000。
題解:相鄰兩個數取最大的加進答案即可.
感受一下這樣就是對的。
**:
#include#include#includeusing namespace std;
int a[1000010],n;
long long ans;
int main(){
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
for (int i=1;i<=n-1;i++) ans+=max(a[i],a[i+1]);
cout<
bzoj1345 序列問題
記每乙個數向比他大的數合併時的代價為這個數字的代價,顯然除了最大值以外,每乙個數都有乙個代價,那麼這個代價和就是最終答案 考慮最小化這個代價和,也就是讓每乙個數的代價最小,顯然這個代價不會小於向左和右第乙個比他大的數中較小的數,然後這樣的方案也很好構造,這個東西用單調棧來處理即可 1 include...
AcWing146 序列 貪心
給定m個序列,每個包含n個非負整數。現在我們可以從每個序列中選擇乙個數字以形成具有m個整數的序列。很明顯,我們一共可以得到n mn m nm個這種序列,然後我們可以計算每個序列中的數字之和,並得到n mn m nm個值。現在請你求出這些序列和之中最小的n個值。對於每組測試用例,均以遞增順序輸出最小的...
BZOJ4403 序列統計
description 給定三個正整數n l和r,統計長度在1到n之間,元素大小都在l到r之間的單調不降序列的數量。輸出答案對10 6 3取模的結果。input 輸入第一行包含乙個整數t,表示資料組數。第2到第t 1行每行包含三個整數n l和r,n l和r的意義如題所述。output 輸出包含t行,...