DP 2017 7 7普及 和諧數

2021-09-28 23:59:13 字數 1651 閱讀 5522

題目描述

給定乙個長度為n

nn的序列a

aa,對於每乙個數都可選或不選,把選出的數有序組成乙個新的序列b

bb,使b

bb序列的「和諧數」最大。

乙個序列的和諧數如下定義:對於位置i

ii,如果第奇數次選的則加上b

ib_i

bi​,偶數次選的則減去b

ib_i

bi​注意:新的序列b

bb必須是從左到右依次在a

aa序列選擇的,即不能打亂順序。

輸入

輸入的第一行是乙個n

nn,第二行為n

nn個數,即序列a

aa輸出

輸出一行乙個整數,即表示最大的和諧數

樣例輸入5

1 2 3 4 5

sample input2

61 3 5 4 6 8

樣例輸出

sample output2

9資料範圍限制

對於20%的資料,1

<=n

<=20

1<=n<=20

1<=n

<=2

0對於50%的資料,1

<=n

<

=1000

1<=n<=1000

1<=n

<=1

000對於100%的資料,1

<=n

<

=10000000,1

<=a

i<

=100

1<=n<=10000000,1<=ai<=100

1<=n

<=1

0000

000,

1<=a

i<=1

00 思路

考試的時候冥思苦想,就是t。。(說髒話好像要罰錢來著) d算不出來第乙個樣例。後來gjy巨佬告訴我只選最後乙個。。。c

設f [i

][0]

f[i][0]

f[i][0

]為第i

ii個數偶數的時候選的最優解

f [i

][1]

f[i][1]

f[i][1

]為第i

ii個數奇數的時候選的最優解

這麼簡單 (心虛) 的轉移方程自己列一列板栗就可以了

因為f [i

]f[i]

f[i]

只跟f [i

−1

]f[i-1]

f[i−1]

有關,所以我們可以用滾動陣列。但是。。。我不會,所以我用了一種簡單粗暴的方法

#include

#include

using namespace std;

long long f1,f0,x1,x0,n;

int main()

printf

("%lld"

,max

(f1,f0));

}

2017 7 7普及 終極數

題目大意 解題思路 題目描述 給定乙個長度為n的序列a,試求出對於序列a的每乙個字首的終極數x,使得 最小,試求出終極數t 如若有多個終極數t,只需輸出最小的那個 第一行乙個整數n,第二行n個整數,中間用空格隔開 輸出一行乙個整數,即表示終極數t 由於題目較為苦澀難懂,先看一下 解題思路 其實就是求...

數學 2017 7 7普及 串

題目描述 給定乙個0 1串,請找到乙個盡可能長的子串,其中包含的0與1的個數相等。輸入 乙個字串,只包含01,長度不超過1000000。輸出 一行乙個整數,最長的0與1的個數相等的子串的長度。樣例輸入 1011 樣例輸出 2資料範圍限制 30 的資料 串的長度 20 思路題面看著這麼舒服,結果難的跟...

JZOJ Day 2 NOIP普及模擬 和諧數

題目描述 給定乙個長度為n的序列a,對於每乙個數都可選或不選,把選出的數有序組成乙個新的序列b,使b序列的 和諧數 最大。乙個序列的和諧數如下定義 對於位置i,如果第奇數次選的則加上bi,偶數次選的則減去bi 注意 新的序列b必須是從左到右依次在a序列選擇的,即不能打亂順序。輸入輸入的第一行是乙個n...