DP 貓咪的進化

2021-09-11 18:12:20 字數 1811 閱讀 1122

有n個實數,每乙個實數可以選,可以不選,也可以選擇它的平方,但如果選擇了它的平方,就不能選擇下乙個數或下乙個數的平方,求選出來的數的和最大是多少

對於乙隻貓咪來說,它是有九條命的。但是並不是所有的貓咪都是這樣,只有那些造化很高的貓咪才能死而復生。而且對於這樣的貓咪,如果它能夠活到第九條命,那麼它最終可以變成任何一種它想成為的動物(當然也可以繼續做貓咪啦),我們稱這樣的貓咪為貓神。現在乙隻獲得了進化機會的貓咪,受到了女神snowharmony的考驗。

它擁有t個單位的時間,在每個單位時間裡,它可以選擇沉默、叫一聲「喵」、或者叫兩聲「喵喵」。對於每個單位時間,均有乙個實數v[i],貓咪叫一聲可獲得v[i]的進化量,叫兩聲可以獲得(v[i])^2的進化量,然而它在某個單位時間如果叫了兩聲,下一單位時間必須保持沉默來休息。

女神snowharmony要求它以一定的方式叫,只有它最終獲得了最大的進化量,它才能進化為貓神,從而變為它想成為的動物——人族zsw95。

請你幫助它計算最大進化量,使他進化為為貓神zsw95。

第一行乙個整數t。

第二行,t個實數v[i]。

最大的進化量,保留四位小數。

3

9 2 1

82.0000
1<=t<=800000,-255.00<=v[i]<=255.00

計算結果不超過maxlongint

用f[i][0],f[i][1],f[i][2]分別表示這個數字不選,選,選平方,就得出了以下狀態轉移方程:

f [i

][0]

=max

+xf[

i][2

]=ma

x+x∗

xf[i][0]=max\left\f[i-1][0]\\ f[i-1][1]\\ f[i-1][2]\end\right.\\f[i][1]=max \beginf[i-1][0] \\ f[i-1][1]\end +x\\f[i][2]=max \beginf[i-1][0] \\ f[i-1][1]\end +x*x

f[i][0

]=ma

x⎩⎨⎧

​(f[

i−1]

[0]f

[i−1

][1]

f[i−

1][2

]​f[

i][1

]=ma

x+xf

[i][

2]=m

ax+x

∗x

#include

#include

#include

using

namespace std;

int n;

double x,f[

800005][

5];double

read()

//快讀

while

(ch>=

'0'&&ch<=

'9')

//數字

if(ch!=

'.')

return z*y;

//非小數

ch=getchar()

;while

(ch>=

'0'&&ch<=

'9')

//小數部分

return z*y;

}int

main()

printf

("%.4lf"

,max

(f[n][0

],max(f[n][1

],f[n][2

])))

;//要最優的

}

貓咪的進化

題目描述 對於乙隻貓咪來說,它是有九條命的。但是並不是所有的貓咪都是這樣,只有那些造化很高的貓咪才能死而復生。而且對於這樣的貓咪,如果它能夠活到第九條命,那麼它最終可以變成任何一種它想成為的動物 當然也可以繼續做貓咪啦 我們稱這樣的貓咪為貓神。現在乙隻獲得了進化機會的貓咪,受到了女神snowharm...

newSSLOJ1296 貓咪的進化 dp

n個時刻中每乙個時刻可以不叫,叫一聲或者叫兩聲。如果在第i i個時刻叫一聲會得到aia i 的權值,叫兩聲得到ai2 ai 2 的權值,但是下乙個時刻就不可以叫。求最大權值和。很裸的dpd p,設f i 0 1 2 f i 0 1 2 分別表示這只貓在第i i個時刻不叫 叫一聲 叫兩聲的最大權值和。...

SSLOJ 1296 貓咪的進化

傳送門 在每個單位時間內,有三種選擇,求如何組合能使得獲得的進化量 隨便打打dpdp dp,但畢竟是野雞ojoj oj上的題,以至於那麼小的n nn也要開個快讀 include include include include include include include include inclu...