日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【DP】猫咪的进化

發(fā)布時(shí)間:2023/12/3 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【DP】猫咪的进化 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

貓咪的進(jìn)化

題目大意:

有n個(gè)實(shí)數(shù),每一個(gè)實(shí)數(shù)可以選,可以不選,也可以選擇它的平方,但如果選擇了它的平方,就不能選擇下一個(gè)數(shù)或下一個(gè)數(shù)的平方,求選出來的數(shù)的和最大是多少

原題:

題目描述

對于一只貓咪來說,它是有九條命的。但是并不是所有的貓咪都是這樣,只有那些造化很高的貓咪才能死而復(fù)生。而且對于這樣的貓咪,如果它能夠活到第九條命,那么它最終可以變成任何一種它想成為的動物(當(dāng)然也可以繼續(xù)做貓咪啦),我們稱這樣的貓咪為貓神。現(xiàn)在一只獲得了進(jìn)化機(jī)會的貓咪,受到了女神snowharmony的考驗(yàn)。
它擁有t個(gè)單位的時(shí)間,在每個(gè)單位時(shí)間里,它可以選擇沉默、叫一聲“喵”、或者叫兩聲“喵喵”。對于每個(gè)單位時(shí)間,均有一個(gè)實(shí)數(shù)v[i],貓咪叫一聲可獲得v[i]的進(jìn)化量,叫兩聲可以獲得(v[i])^2的進(jìn)化量,然而它在某個(gè)單位時(shí)間如果叫了兩聲,下一單位時(shí)間必須保持沉默來休息。
女神Snowharmony要求它以一定的方式叫,只有它最終獲得了最大的進(jìn)化量,它才能進(jìn)化為貓神,從而變?yōu)樗氤蔀榈膭游铩俗鍅sw95。
請你幫助它計(jì)算最大進(jìn)化量,使他進(jìn)化為為貓神zsw95。

輸入

第一行一個(gè)整數(shù)t。
第二行,t個(gè)實(shí)數(shù)v[i]。

輸出

最大的進(jìn)化量,保留四位小數(shù)。

輸入樣例

3 9 2 1

輸出樣例

82.0000

說明

1<=t<=800000,-255.00<=v[i]<=255.00
計(jì)算結(jié)果不超過maxlongint

解題思路:

用f[i][0],f[i][1],f[i][2]分別表示這個(gè)數(shù)字不選,選,選平方,就得出了以下狀態(tài)轉(zhuǎn)移方程:
f[i][0]=max{(f[i?1][0]f[i?1][1]f[i?1][2]f[i][1]=max{f[i?1][0]f[i?1][1]}+xf[i][2]=max{f[i?1][0]f[i?1][1]}+x?xf[i][0]=max\left\{(\begin{matrix}f[i-1][0]\\ f[i-1][1]\\ f[i-1][2]\end{matrix}\right.\\f[i][1]=max \begin{Bmatrix}f[i-1][0] \\ f[i-1][1]\end{Bmatrix} +x\\f[i][2]=max \begin{Bmatrix}f[i-1][0] \\ f[i-1][1]\end{Bmatrix} +x*xf[i][0]=max????(f[i?1][0]f[i?1][1]f[i?1][2]?f[i][1]=max{f[i?1][0]f[i?1][1]?}+xf[i][2]=max{f[i?1][0]f[i?1][1]?}+x?x
第一個(gè):三種情況,都可以不選
第二個(gè):上一個(gè)不選平方才可以選他
第三個(gè):上一個(gè)不選平方才可以選平方
然后因?yàn)闀r(shí)間的原因,要加快讀

代碼:

#include<cstdio> #include<iostream> #include<cstring> using namespace std; int n; double x,f[800005][5]; double read()//快讀 {char ch;int wh=1;double z=0,y=1;ch=getchar()while(ch<'0'||ch>'9')//前面的空格{if (ch=='-') y=-1;ch=getchar();}while(ch>='0'&&ch<='9')//數(shù)字{z=z*10+(double)(ch-48);ch=getchar();}if(ch!='.') return z*y;//非小數(shù)ch=getchar();while(ch>='0'&&ch<='9')//小數(shù)部分{wh*=10;z+=(double)(ch-48)/wh;ch=getchar();}return z*y; } int main() {scanf("%d",&n);for (int i=1;i<=n;++i){x=read();f[i][0]=max(f[i-1][0],max(f[i-1][1],f[i-1][2]));//動態(tài)轉(zhuǎn)移方程f[i][1]=max(f[i-1][0],f[i-1][1])+x;f[i][2]=max(f[i-1][0],f[i-1][1])+x*x;}printf("%.4lf",max(f[n][0],max(f[n][1],f[n][2])));//要最優(yōu)的 }

總結(jié)

以上是生活随笔為你收集整理的【DP】猫咪的进化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。