bzoj1345 序列問題 貪心

2021-07-13 10:56:33 字數 699 閱讀 3502

對於乙個給定的序列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行,...