usOJ5529 小奇探險

2021-09-29 01:53:50 字數 2822 閱讀 6421

傳送門 to usoj

題目描述

小奇去遺跡探險,遺跡裡有 n

nn 個寶箱,有的裝滿了珠寶,有的裝著廢品。

小奇有地圖,所以它知道每乙個寶箱的價值,但是它不喜歡走回頭路,所以要按順序拿這 n

nn 個寶箱中的若干個。

拿寶箱很累的。一開始小奇的體力是 1

11 ,每得到乙個寶箱之後,小奇得到的價值是體力 ×

\times

× 寶箱的價值,之後它的體力就會變為原來的 k

kk 倍 。

小奇不喜歡連續放過很多寶箱,所以任意一段長度為 m

mm 的序列中,小奇一定要取走其中的乙個寶箱。

現在小奇想知道它能得到的最大價值和。

輸入格式

第一行,兩個整數 n,m

(1≤m

≤n

)n,m(1\le m\le n)

n,m(1≤

m≤n)

,表示的含義如題目中所述;

第二行,乙個不超過四位的小數 k(0

<

k<1)

k(0k(

0<

k<1)

,表示的含義如題目中所述;

第三行,n

nn 個整數,第 j

jj 個整數表示第 j

jj 個寶箱的價值。

輸出格式

輸出一行,乙個實數,表示小奇能得到的最大價值和,四捨五入保留兩位小數。

資料範圍與提示

n ≤1

05

n\le 10^5

n≤10

5 ,寶箱的價值絕對值不超過 109

10^9

109 。

將第 x

xx 個寶箱的價值記為 v

xv_x

vx​ 。

暴力用 f(x

,y,z

)f(x,y,z)

f(x,y,

z)表示前 i

ii 個點,上乙個是 j

jj ,已經拿了 k

kk 個。o(n

4)

\mathcal o(n^4)

o(n4

) 。跑出來了估計都退役了。

動態規劃

用 f (x

,y

)f(x,y)

f(x,y)

表示走到了x

xx點並且把它拿了,一共拿了 y

yy 個寶箱。那麼 f(x

,y)=

ky−1

vx

+max⁡u

=x−m

x−1f

(u,y

−1

)f(x,y)=k^v_x+\max_^f(u,y-1)

f(x,y)

=ky−

1vx​

+maxu=

x−mx

−1​f

(u,y

−1) 。本來是 o(n

3)

\mathcal o(n^3)

o(n3

) ,滑窗優化一下就 o(n

2)

\mathcal o(n^2)

o(n2

) 了。聽說用腳造資料的出題人這個做法放了你90分。

高階動態規劃

用 f (x

)f(x)

f(x)

表示x

xx往後走並且把 x

xx 拿了。那麼!

f (x

)=vx

+k

⋅max⁡u

=x+1

x+mf

(u

)f(x)=v_x+k\cdot\max_^f(u)

f(x)=v

x​+k

⋅u=x

+1maxx+m

​f(u

)仍然滑窗,o(n

)\mathcal o(n)

o(n)

。奧妙重重!

#include

#include

#include

#include

#include

using

namespace std;

double

max(

const

double

&a,const

double

&b)const

int maxn =

100005

;const

double infty =

1e100

;int n, m, a[maxn]

;double k;

double dp[maxn]

;deque<

int> dq;

// 滑窗

void

pushinto

(int x)

dq.push_back

(x);

}int

main()

double ans =

-infty;

for(

int i=

1; i<=m;

++i)

ans =

max(ans,dp[i]);

printf

("%.2lf"

,ans)

;return0;

}

usOJ6149 英語危機

傳送門 題目描述 有一條數字長鏈,這條鏈上有些數字是相同的,有些地方是不同的,這條數鏈有很多種不同的可能。求最多有多少種可能的方案?為了簡化題目,數鏈沒有前導零。因為答案可能很大,所以你只需要輸出答案mod 109 7 mod10 9 7 mod109 7的結果。輸入輸出格式 輸入格式 第一行 兩個...

Elasticsearch5 5 2 心得筆記

centos7 es 5.4.3 wget 解壓。cd config 進入es配置資料夾 vi elasticsearch.yml 修改配置檔案修改配置項 cluster.name 可不配置 node.name 如果是單機版可不配置,如果是集群,則不同節點node.name應該不同 path.dat...

windows下編譯除錯mysql5 5 24原始碼

突然想學習下mysql,看看mysql的原始碼,首先就需要把原始碼編譯,這是學習它的第一步。萬事開頭難,一點也沒錯,昨天晚上搞了很久沒有弄好,今天回來第一件事就是把這個解決。問題總算解決,對該過程總結如下 2 解壓 新建了目錄,mysql,然後把解壓的檔案全部放在了這檔案裡 3 準備環境和工具 4 ...