洛谷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点有一个过河卒,需要走 ...
随机推荐
- 【剑指Offer】二叉树的下一个结点 解题报告(Python)
[剑指Offer]二叉树的下一个结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- 【LeetCode】452. Minimum Number of Arrows to Burst Balloons 解题报告(Python)
[LeetCode]452. Minimum Number of Arrows to Burst Balloons 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https ...
- DP? (hdu3944)
DP? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 128000/128000 K (Java/Others)Total Subm ...
- Mysql客户端的安装
Mysql数据库(简称)属于C/S架构,正常工作中一般都会提供服务端,我们只需要安装客户端进行查询修改数据等操作即可. 正常工作中不管是测试人员或者开发人员,一般数据库的管理员(测试负责人或者开发负责 ...
- 【MySQL作业】DDL 和 DML——美和易思使用 DML 新增和更新表数据应用习题
点击打开所使用到的数据库>>> 1.添加 easyShopping 客户数据. insert into customer values('abc111','111',' 刘一鸣 ', ...
- 编写Java程序,使用JDBC连接SQL Server数据库
返回本章节 返回作业目录 需求说明: 使用JDBC连接SQL Server数据库 SQL Server数据库位于192.168.2.101. 所需连接的数据库为eshop_db,用户名为test,密码 ...
- 线性基(Linear Basis)学习笔记
前言 我看网络上没有什么非常系统的教学,可能是我太菜了吧,现在才学,做个记录给自己看. 简略介绍 一个数集能两两异或,能表出许多新的数. 线性基是一个集合,能够在记录最少的数的基础上,表示出一个等价的 ...
- python appium使用uiselector定位时,提示 Could not parse UiSelector argument: 'XXX' is not a string
运行自动化代码,appium返回Could not parse UiSelector argument: 'XXX' is not a string,其中的xxx就是定位的元素 解决方案:外侧用 '' ...
- 初识python: 反射
反射:通过字符串映射或修改程序运行时的状态.属性.方法 反射有以下三个方法: hasattr(object, name) 判断一个对象(object)里是否有对应的字符串(name ...
- MySQL删除数据库或表(DROP DATABASE/table语句)
DROP DATABASE [ IF EXISTS ] <数据库名> DROP table[ IF EXISTS ] <数据库表名> 语法说明如下: <数据库名>: ...