生活随笔
收集整理的這篇文章主要介紹了
猫咪的进化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
對于一只貓咪來說,它是有九條命的。但是并不是所有的貓咪都是這樣,只有那些造化很高的貓咪才能死而復生。而且對于這樣的貓咪,如果它能夠活到第九條命,那么它最終可以變成任何一種它想成為的動物(當然也可以繼續做貓咪啦),我們稱這樣的貓咪為貓神。現在一只獲得了進化機會的貓咪,受到了女神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
.
.
.
.
.
.
.
程序:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;int t;
double f[800010][3],v[800010];template <typename _TpRealnumber>
inline double readr()
{register int flag = 1;register char c = getchar();while ((c > '9' || c < '0') && c != '-') c = getchar();if (c == '-') flag = -1, c = getchar();register _TpRealnumber init = (c & 15);while ((c = getchar()) <= '9' && c >= '0') init = init * 10 + (c & 15);if (c != '.') return init * flag;register _TpRealnumber l = 0.1;while ((c = getchar()) <= '9' && c >= '0') init = init + (c & 15) * l, l *= 0.1;return init * flag;
}int main()
{scanf("%d",&t);for (int i=1;i<=t;i++)v[i]=readr<double>();//scanf("%lf",&v[i]);memset(f,-0x3f,sizeof(f));f[0][0]=f[0][1]=f[0][1]=0;for (int i=1;i<=t;i++){f[i][0]=max(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])+v[i];f[i][2]=max(f[i-1][0],f[i-1][1])+v[i]*v[i];}double ans;printf("%0.4lf",max(max(f[t][0],f[t][1]),f[t][2]));return 0;
}
轉載于:https://www.cnblogs.com/YYC-0304/p/11094949.html
總結
以上是生活随笔為你收集整理的猫咪的进化的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。