• P2690 接苹果


    ————————————————————————

    我用了记忆化,因为它比DP更好理解

    —————————————————————————

    资料:百度百科( MIKU,I Love HER )

      来自洛谷:(背包的题解)//侵权删

    ——————————————————————————

    分析:不会dp怎么办,记忆化来代替

    (oi笼罩在一片痛苦中,神说:让dp诞生吧,oi更加痛苦了)

    ——————————————————————————

    原题链接;P2690

    —————————————————————————

    代码:↓

    /*
    welcome
    
    这里是记忆化搜索,// 别问我是什么,我是蒟蒻 
    
    其实记忆化和动态规划很像,真的很像,但是,记忆化比较好想
    
    毕竟它还是DFS 
    
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int t,w;//总时间和总步数 
    int zong[100000];//苹果位置 
    int dp[10000][100];//记忆化也 
    int dfs(int step,int now,int time){//既然是记忆化,就要把这些变量 全列上 
        if(time>t)//边界——超时 
        return 0;
        if(-1!=dp[time][step]) return dp[time][step];//记忆部分 
        if(zong[time]==now)//苹果在当前的树上 
        return dp[time][step]=dfs(step,now,time+1)+1;//直接加一即可 
        else
        {
        if(step<w)//如果能动 
        return dp[time][step]=max(dfs(step+1,-1*now+3,time+1)+1,dfs(step,now,time+1));//就计算动和不动的最大值 
        else
        return dp[time][step]=dfs(step,now,time+1); //动不了了 
        }
    }
    
    
    int main()
    {
        //初始化和读入 
    memset(dp,-1,sizeof(dp));
        cin>>t>>w;
        for(int i=1;i<=t;++i)
        cin>>zong[i];
        cout<<dfs( 0,1,1);
    }

    ---恢复内容结束---

  • 相关阅读:
    2019年9月笔记
    2019年8月笔记
    2019年7月笔记
    2019年5月笔记
    2019年6月笔记
    2019年4月笔记
    JAVA MAC 配置
    ionic3 打包发布,以安卓说明
    Workman websocket 握手连接
    关于mysql数据库的表概况 ,查看表状态
  • 原文地址:https://www.cnblogs.com/For-Miku/p/10846895.html
Copyright © 2020-2023  润新知