动态规划与机器人横竖走问题

上次是动态规划关于硬币规划问题,我们大致了解到所谓动态规划和递归也是有不小的区别的,递归是将之前的所有可能全部求出,但是动态规划却是只需要求出一部分也就是和硬币息息相关的最近的两步,很是有趣。这次我将要以机器人横竖走问题来再次的对动态规划进行一次解析。
首先我们有一个机器人,这个机器人只能横竖走(显然是个菜鸡程序员写的,我要是写,他就不动),在横有六格,竖有五格的这么一个长方形方格中,他从左上角走到右下角,每次只能走一格,问一共有多少种走法?

在这里插入图片描述
上面的表格就是我们这次的主角,我们发现,如果想要知道机器人走到终点需要多少种可能那么就必然需要知道机器人到两个蓝色方块的次数,然后相加之和就是机器人到终点的次数。同理在这里插入图片描述
从上面的表格中我们可以知道,如果想要知道机器人到蓝色方格的次数,自然需要知道机器人到绿色和紫色方格的次数,然后相加之和就是机器人到蓝色方格的次数,两个蓝色方格的次数相加就是到终点的次数。

我想,现在你已经发现了,这样无限循环下去,如何是个头啊,所以他必定需要一个初始值,显然这个初始值就是1(因为你可以试试,无论如何走只有一种可能)

在这里插入图片描述

这样是不是很明显了,然后一步一步的加下去,自然就出来如下结果:

在这里插入图片描述
这是实现这个效果的代码:

package jiqiren;

import java.util.Scanner;

public class jiqiren {

public static void main(String args[])
{
    int x ;
    int y ;
    Scanner scanner = new Scanner(System.in);
    System.out.println("我们将要做的是对机器人只能在定量方格中横竖走的问题求解");
    System.out.println("请输入这个方格横有多少块");
    x = scanner.nextInt();
    System.out.println("请输入这个方格竖有多少块");
    y = scanner.nextInt();

    System.out.println("机器人走到右下角有"+yunsuan(x,y)+"种情况");
}
public static int yunsuan (int x, int y)
{
    int[][] Square =new int[x][y];

    for (int i = 0 ;i< x; i++)
    {
        Square[i][0] = 1;

    }

    for (int i = 0 ;i< y; i++)
    {
        Square[0][i] = 1;

    }


    for (int i = 1 ;i< x; i++ )
    {
        for (int j = 1 ;j< y ; j++)
        {
            Square[i][j] = Square[i-1][j] + Square[i][j-1];
        }
    }
    return Square[x-1][y-1];

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值