博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DP-N*M棋盘走法
阅读量:7159 次
发布时间:2019-06-29

本文共 645 字,大约阅读时间需要 2 分钟。

hot3.png

套路:计数问题 , 最优,最大,最小,最长,计数

N*M的棋盘上,小兵要从左下角走到右上角,只能向上或者向右走, 问有多少种走法

先的得出递归暴力解法

int f(int x, int y){	if (x <= 0 || y <= 0)return 0; //某一个方向为0 那么已经到达了目标点	if (x == 1 || y == 1)return 1;某一个方向为1 那么到达目标点只有一种走法	return f(x - 1, y)+f(x, y - 1);//左或者右 有多少走法}

然后转换为DP

int arr[10][10];	memset(arr, 0, 4*10*10);	for (int i = 0; i <= 5; i++)	{		arr[1][i] = 1;//根据递归式 写出初始状态		arr[i][1] = 1;	}	for (int x = 2; x <= 6; x++)	{		for (int y = 2; y <= 6; y++)		{			arr[x][y] = arr[x - 1][y] + arr[x][y-1];//递推		}	}	cout << arr[6][6] << endl;

如果不允许某几格不能走,那么可以吧该格置为0表示该状态下没有,在递归式中表示为判断n m是否是可走的,不可走返回0,转换到DP其实就变成了初始值为0

转载于:https://my.oschina.net/kkkkkkkkkkkkk/blog/747472

你可能感兴趣的文章
零点起飞学Java
查看>>
UltraEdit 执行javap命令
查看>>
基础总结篇之五:BroadcastReceiver应用详解(二)
查看>>
开发小故事——神奇的if…else…
查看>>
Tcp 三次握手与四次挥手
查看>>
Android实现点击通知栏后,先启动应用再打开目标Activity
查看>>
1.创建管理机:ntp
查看>>
vSphere Client界面语言的更改
查看>>
Java集合遍历引发的"血案"
查看>>
Ubuntu14.04 安装docker
查看>>
磁盘管理
查看>>
Hosts 作用及使用
查看>>
由文档那些事儿引发的思考 - 领导,您该反思了
查看>>
31天重构之个人粗浅看法
查看>>
redis (一)数据类型
查看>>
性能优化之数据库优化
查看>>
Android数据库高手秘籍:SQLite命令
查看>>
python3.3 一些数组的基础
查看>>
SQuirreL SQL Client的安装使用
查看>>
mysql 相关操作
查看>>