zoukankan      html  css  js  c++  java
  • CF-358D-Dima and Hares【T^T+*^*】

    【文章标题打着转载,是因为不是自己想出来的解题,但下面的文字是自己敲的【~捂脸*>_<*~】】

    题目就不贴了~~~DP+greedy的题。弱爆了看别人的代码思路过的。T^T但还是自己复述一遍吧~~

    刚开始看题目有点下不了手,不知道该怎么喂傲娇的小兔纸才好。

    然后看了解题才知道,哦,原来是酱紫:就是喂某只小兔纸,可是收获的那只兔纸快乐值跟周围的兔纸有木有喂饱有关~~然后全部兔纸都要喂。

    dp转移方程如下:

    dp[i][0] = max(d[i-1][0] + b[i-1],d[i-1][1] + c[i-1]);      //d[i][0] 代表i-1只兔子没被喂过   所以前者的喂兔纸的顺序是:i-> i-1 -> i-2;后者喂兔纸的顺序是:i-2 -> i -> i-1

    dp[i][1] = max(d[i-1][0] + a[i-1],d[i-1][1] + b[i-1]).     //d[i][1]  代表i-1只兔子被喂过      所以前者的喂兔纸的顺序是:i-1 -> i -> i-2;后者喂兔纸的顺序是:i-2 -> i-1 -> i


    蓝后代码如下了~~

    #include<iostream>
    
    using namespace std;
    
    const int Max = 3005;
    int dp[Max][2];
    int max(int &a, int &b)
    {
        return a > b?a:b;
    }
    int main()
    {
        int n;
        cin>>n;
        int a[Max],b[Max],c[Max];
        for(int i = 1; i <= n; i++)
         cin>>a[i];
        for(int i = 1; i <= n; i++)
         cin>>b[i];
        for(int i = 1; i <= n; i++)
         cin>>c[i];
        for(int i = 0; i < Max; i++)
          for(int j = 0; j < 2; j++)
            dp[i][j] = 0;
        if(n == 1) {cout<<a[1]<<endl; return 0;}
        //dp[i][0]表示i-1没取过,dp[i][1]表示i-1取过
        dp[2][0] = b[1];
        dp[2][1] = a[1];
        for(int i = 3; i <= n; i++)
        {
            dp[i][0] = max(dp[i-1][0]+b[i-1],dp[i-1][1]+c[i-1]);
            dp[i][1] = max(dp[i-1][0]+a[i-1],dp[i-1][1]+b[i-1]);
        }
        int as;
        as = max(dp[n][0]+a[n],dp[n][1]+b[n]);
        cout<<as<<endl;
        return 0;
    }
    


  • 相关阅读:
    jpa入门案例----使用jpa对数据库进行查询、删除、修改操作
    ssm详细流程和步骤
    Dubbo
    ssm运行BUG
    mybatis 入门
    Linux
    Redis
    maven
    三层架构 开发模式
    转发和重定向的区别
  • 原文地址:https://www.cnblogs.com/ZiningTang/p/3834721.html
Copyright © 2011-2022 走看看