zoukankan      html  css  js  c++  java
  • 动态规划——Frog Jump

    题目大意就是,给定一个数组,数组中数字从小到大排列,第一个元素一定是0,青蛙的初始位置就在0,后面依次从小到大排列,表示第几个石子,青蛙只有跳到最后一个石子上才算成功过河,而且青蛙第一次从0位置只能跳一个单位。假如上一次青蛙跳了k个单位,下一次青蛙只能跳 k - 1 , k , k + 1个单位。
    这个题的状态不是一个简单的dp数组,因为状态的提取很难用数组实现,这个题要用set和map这种现成的数据结构,这里不再细讲因为这个题只要会C++中的set和map两种存储结构就能简单的AC,map用来储存 i ->value[i] ,set用来储存每个石子上能跳的单位数量。这个题具有明显的递推关系,所以算动态规划类的题目。
     
     1 bool canCross(vector<int>& stones) {
     2         if(stones[1]!=1)return false;
     3         set<int>pos1[1111];
     4         pos1[0].insert(1);
     5         map<int,int>pos2;
     6         int len = stones.size();
     7         for(int i = 0;i<len;i++)
     8             pos2[stones[i]] = i;
     9         for(int i = 0;i<len;i++){
    10             for(set<int>::iterator j = pos1[i].begin();j!=pos1[i].end();j++){
    11                int tmp = *j;
    12                if(pos2[stones[i]+tmp])pos1[pos2[stones[i]+tmp]].insert(tmp);
    13                if(pos2[stones[i]+tmp+1])pos1[pos2[stones[i]+tmp+1]].insert(tmp+1);
    14                if(pos2[stones[i]+tmp-1])pos1[pos2[stones[i]+tmp-1]].insert(tmp-1);
    15             }
    16         }
    17         return pos1[len-1].size();
    18     }
  • 相关阅读:
    用jmeter通过ssl验证访问https
    github jekyll主题
    JMeter中返回Json数据的处理方法
    使用Nginx实现反向代理
    Antd 表格 -- 自定义合并行处理
    Go语言--第8章 包(package)
    GO语言 -- 第7章 接口(INTEFACE)
    GO语言--第6章 结构体
    PHP--相关扩展安装
    Go语言--第5章 函数
  • 原文地址:https://www.cnblogs.com/messi2017/p/9943676.html
Copyright © 2011-2022 走看看