zoukankan      html  css  js  c++  java
  • SSLOJ 1296.猫咪的进化

    题目

    题目描述

          对于一只猫咪来说,它是有九条命的。但是并不是所有的猫咪都是这样,只有那些造化很高的猫咪才能死而复生。而且对于这样的猫咪,如果它能够活到第九条命,那么它最终可以变成任何一种它想成为的动物(当然也可以继续做猫咪啦),我们称这样的猫咪为猫神。现在一只获得了进化机会的猫咪,受到了女神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 

     

    分析

        简单DP

    方法一:简单的动态规划题目。状态转移方程:

       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])+v[i];

       f[i,2]:=max(f[i-1,0],f[i-1,1])+sqr(v[i]);

    目标:max(f[t,0],f[t,1],f[t,2])   边界:f数组清零   预计得分100

    方法二:由于我们发现本次状态只跟上次有关,可以使用一个[0..1 , 0..2]的滚动数组优化空间。    预计得分100

     

    代码

     

     1 #include <iostream>
     2 #include<cstdlib>
     3 #include <cstdio>
     4 #define N 800005
     5 using namespace std;
     6 int t;
     7 double res,v,f[N];
     8 double read(){
     9     double p=0,ff=1; char c=getchar(); 
    10     while (!isdigit(c)) {if (c=='-') ff=-1; c=getchar();}
    11     while (isdigit(c)) p=p*10+c-48,c=getchar();
    12     if (c!='.') return p*ff; 
    13     double w=10; c=getchar();  
    14     while (isdigit(c)) p+=(c-48)/w,w*=10,c=getchar(); 
    15     return p*ff; 
    16 }
    17 int main()
    18 {
    19     scanf("%d",&t);
    20     for(int i=2;i<=t+1;++i) f[i]=-255;
    21     for(int i=1;i<=t;++i)
    22     {
    23         v=read();
    24         f[i]=max(f[i],f[i-1]);
    25         f[i]=max(f[i],f[i-1]+v);
    26         f[i+1]=max(f[i+1],f[i-1]+v*v);
    27         res=max(res,f[i]);
    28     }
    29     printf("%.4lf",max(res,f[t+1]));
    30     return 0;
    31 }
    为何要逼自己长大,去闯不该闯的荒唐
  • 相关阅读:
    3D集合图元:最小边界框/包围盒(boundingbox)
    vs2012下 error4996
    将自己的类封装为lib的方法
    3D特征:关于HFM和HBB
    C++的Matlab接口
    BigDataMini导论
    vs2012编译boost_1_54_0
    RGB_D_开发征程(使用Kinect)
    **PCD数据获取:Kinect+OpenNI+PCL对接(代码)
    PCL:全程详解 VS2010+PCL配置
  • 原文地址:https://www.cnblogs.com/zjzjzj/p/10461369.html
Copyright © 2011-2022 走看看