洛谷P1002过河卒java100分题解
题目描述如图:
这道题我以前以回溯的方法做,只能拿到60分
现在才发现是道动态规划题
解题思路:
创建一个(0,0)到终点打小的二维数组表示棋盘
每个坐标的值为此位置到终点的路数
最下方一排和最右方一列如果没有马的控制点,能到终点的路数为1
如图所示:
从下向上,从右向左遍历,每个格子到终点的路数等于下方的格子的值+右方的格子的值
如果遇到马的控制点,则不计算这个格子
完整代码如下:
import java.util.Scanner; public class DP1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//创建棋盘
int a=sc.nextInt();
int b=sc.nextInt();
a++;
b++;
long[][] qp=new long[a][b]; //创建马
int n=sc.nextInt();
int m=sc.nextInt(); //如果马的控制点在棋盘内 设置为0
qp[n][m]=-1;
if (n-1>=0&&m-2>=0){
qp[n-1][m-2]=-1;
}
if (n-1>=0&&m+2<b){
qp[n-1][m+2]=-1;
}
if (n-2>=0&&m-1>=0){
qp[n-2][m-1]=-1;
}
if (n-2>=0&&m+1<b){
qp[n-2][m+1]=-1;
}
if (n+1<a&&m-2>=0){
qp[n+1][m-2]=-1;
}
if (n+1<a&&m+2<b){
qp[n+1][m+2]=-1;
}
if (n+2<a&&m-1>=0){
qp[n+2][m-1]=-1;
}
if (n+2<a&&m+1<b){
qp[n+2][m+1]=-1;
} //将棋盘下方边和右方边初始化为1
for (int i = a-1; i>=0; i--) {
if (qp[i][b-1]==-1){
break;
}
qp[i][b-1]=1;
}
for (int i = b-1; i >=0; i--) {
if (qp[a-1][i]==-1){
break;
}
qp[a-1][i]=1;
} for (int i = a-2; i >= 0; i--) {
for (int j = b-2; j >= 0; j--) {
if (qp[i][j]==-1){
continue;
}
if (qp[i+1][j]==-1&&qp[i][j+1]==-1){
continue;
}
if (qp[i+1][j]<0){
qp[i][j]=qp[i][j+1];
continue;
}
if (qp[i][j+1]<0){
qp[i][j]=qp[i+1][j];
continue;
}
qp[i][j]=qp[i+1][j]+qp[i][j+1];
}
}
System.out.println(qp[0][0]); }
}
洛谷P1002过河卒java100分题解的更多相关文章
- 洛谷 P1002过河卒
洛谷 P1002过河卒 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点 ...
- 洛谷P1002 过河卒 [2017年4月计划 动态规划15]
P1002 过河卒 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之 ...
- 洛谷P1002 过河卒 题解 动态规划
题目链接:https://www.luogu.com.cn/problem/P1002 题目大意 棋盘上\(A\)点有一个过河卒,需要走到目标\(B\)点.卒行走的规则:可以向下.或者向右.同时在棋盘 ...
- 洛谷P1002——过河卒
又是洛谷题,要不是有小姐姐不会,我才不想动脑子.先贴一下题目地址https://www.luogu.org/problem/P1002 再贴一下题目: 我们读一下题目,这可不比学校的**算法题,读完一 ...
- 洛谷 P1002 过河卒 【棋盘dp】
题目链接:https://www.luogu.org/problemnew/show/P1002 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点 ...
- 洛谷[P1002]过河卒
原题地址:https://www.luogu.org/problemnew/show/P1002 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点 ...
- 洛谷P1002 过河卒
关于蒟蒻的我,刚刚接触DP.... 那么就来做一道简单DP吧.... 首先先看题: 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一 ...
- 洛谷P1002 过河卒【dp】
棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为"马拦过河卒 ...
- 洛谷——P1002 过河卒||codevs——T1010 过河卒
https://www.luogu.org/problem/show?pid=1002#sub||http://codevs.cn/problem/1010/ 题目描述 棋盘上A点有一个过河卒,需要走 ...
随机推荐
- 【LeetCode】491. Increasing Subsequences 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 15 - Vue3 UI Framework - 完工部署
项目官网也基本完成了,接下来我们再讲一下如何将项目官网部署到 GitHub Pages 上 返回阅读列表点击 这里 项目配置 常见的模式有三种,即 History 模式 Hash 模式 Memory ...
- C++ std-11 常用方法
对多个值取最值 C++标准库提供了获取最大值和最小值的方法: int mi = std::min(x1, x2); int ma = std::max(x1, x2); 如果想获取超过两个数的最值呢? ...
- 使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态
查看本章节 查看作业目录 需求说明: 使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态.点击列表的项,切 ...
- InnoDB学习(七)之索引结构
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.可以将数据库索引和书的目录进行类比,通过书的目录我们可以快速查找到章节位置,如果没有目录就只能一页页翻书查找 ...
- Hbase集群安装Version1.1.5
Hbase集群安装,基于版本1.1.5, 使用hbase-1.1.5.tar.gz安装包. 1.安装说明 使用外部Zookeeper集群而非Hbase自带zookeeper, 使用Hadoop文件系统 ...
- SpringBoot 之 控制器层
@Controller public class EmployeeController { @Autowired EmployeeDao employeeDao; @Autowired Departm ...
- python appium自动化报“Encountered internal error running command: UnknownError: An unknown server-side error occurred while processing the command. Original error: Could not proxy command to remote server
运行app自动化代码时报"Encountered internal error running command: UnknownError: An unknown server-side e ...
- 初识python: os 模块
偷下懒,直接看代码吧: #!/user/bin env python # author:Simple-Sir # time:2019/8/21 16:38 # os 模块 import os # os ...
- Python_getattr+__import__ 实现动态加载模块、类对象或函数
__import__() 语法 __import__(name[, globals[, locals[, fromlist[, level]]]]) 参数 name -- 字符串,模块的导入路径 说明 ...