jumpgame

来源:互联网 发布:个人博客网站源码 编辑:程序博客网 时间:2024/05/10 08:22

动态规划经典题目
用“局部最优和全局最优解法”。我们维护一个到目前为止能跳到的最远距离,以及从当前一步出发能跳到的最远距离。局部最优local=A[i]+i,而全局最优则是global=Math.max(global, local)。递推式出来了,代码就比较容易实现了。因为只需要一次遍历时间复杂度是O(n),而空间上是O(1)。代码如下:

include

include

include

include

include

using namespace std;

int n, board[100][100];
int cache[100][100];

int jump2(int x, int y)
{
if (y >= n || x >= n)
return 0;
if (y == n-1 && x == n -1)
return 1;
int& ret = cache[x][y];//这里是引用的意思,而且ret的值改变了,cache[x][y]的值也会发生改变
if (ret != -1)
return ret;
int jumpSize = board[x][y];
return ret = (jump2(x+jumpSize,y)|| jump2(x,y+jumpSize));//加步数
}

int main()
{
cin>>n;
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
cin>>board[i][j];
}
}
memset(cache,-1,sizeof(cache));
int flag = 0;
flag = jump2(0,0);
if (flag)
cout<<”yes”<

原创粉丝点击