洛谷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点有一个过河卒,需要走 ...
随机推荐
- 【九度OJ】题目1179:阶乘 解题报告
[九度OJ]题目1179:阶乘 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1179 题目描述: 输入n, 求y1=1!+3!+-m ...
- codeforce 597C-Subsequences(dp+树状数组)
题目和南阳那道题一样链接http://www.cnblogs.com/zzuli2sjy/p/4943774.html 代码: 1 #include<stdio.h> 2 #include ...
- PL2586旺玖|USB 2.0HUB 工业级芯片|PROLIFIC PL2586
工业级 USB 2.0 HUB 高速4端口集线器控制器 PL2586 1.PL2586说明 PL2586是USB 2.0高速4端口集线器控制器的高性能解决方案,完全符合通用串行总线规范2.0.控 ...
- SpringBoot中JPA使用动态SQL查询
https://www.jianshu.com/p/f72d82e90948 可以重点关注方法二,把原生sql传入数据库去查询 好处是:更加灵活坏处是:拼接sql比较痛苦,也容易出问题,比如拼接的sq ...
- APICloud超实用经验分享——平台功能
从2016年开始使用APICloud进行app项目开发,到现在也有五六年了.在此过程中伴随着APICloud一起成长,踩过一些坑,自己的技术也提升不少.在APICloud 推出avm框架一年之后,ID ...
- Linux sudo 找不到命令
普通用户执行需要root权限的命令,提示"找不到命令",但是root用户执行该命令不报错,可能是由于该命令未处在sudo搜索的路径. 本文以sudo easy_install 为例 ...
- springboot 配置 swagger2
1.pom.xml 添加依赖 <!--swagger2 依赖--> <dependency> <groupId>io.springfox</groupId&g ...
- 【Warrior刷题笔记】剑指offer 32. 三道题,让你学会二叉树的深度广度优先遍历与递归迭代技术
题目一 剑指 Offer 32 - I. 从上到下打印二叉树 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/cong-shang-dao-xi ...
- 微信小程序自定义导航栏组件
1.首先,要在json文件中设置为自定义的形式 "navigationStyle": "custom" 2.计算相关值 导航栏分为状态栏和标题栏,只要能算出每台 ...
- 学习笔记--Java中的变量
Java中的变量 /** * 关于 Java 语言当中的变量: * * 1. 什么是变量? * - 变量的本质上来说是内存空间,这块空间有(数据类型.名字.字面值) * - 变量包括三部分:数据类型. ...