P1002过河卒
因为卒每到一个点上,就有两种情况。1.从左边过来。2.从上面过来。我们设f[i][j]为卒到[i][j]这个点的方案数,那么方程就是f[i][j]=f[i-1][j]+f[i][j-1],边界状态为f[i][0]=0,f[0][i]=0。哦,等等好像有什么不对的,如果马的控制点在边界上怎么办?那就从控制点开始,后面的f[i][0](或f[0][i])=0呗。but马有8个控制点,所以就要讨论8种情况。马的控制点为[x][y],[x-2][y+1],[x-2][y-1],[x-1][y-2],[x-1][y+2],[x+1][y-2],[x+1][y+2],[x+2][y-1],[x+2][y+1]。知道这些后,就可以写程序(暴力打表)了
打表如下:
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- using namespace std;
- long long x,y,n,m,f[][];
- int main()
- {
- cin>>n>>m>>x>>y;
- for(int i=;i<=n;i++)
- {
- if(y==)
- {if(i<x)
- f[i][]=;
- }
- if(y!=)
- f[i][]=;
- }
- for(int i=;i<=m;i++)
- {
- if(x==)//滤掉马在边界上
{if(i<y)- f[][i]=;
- }
- if(x!=)
- f[][i]=;
- }
- if(x-==)
- { if(y->)
- {for(int i=y-;i<=m;i++)
- f[][i]=;
- }
- else
- {for(int i=y+;i<=m;i++)
- f[][i]=;
- }
- }
- if(x-==)
- {if(y->)//分情况讨论
{for(int i=y-;i<=n;i++)- f[i][]=;
- }
- else
- {for(int i=y-;i<=n;i++)
- f[i][]=;
- }
- }
- if(y-==)
- {if(x->)
{for(int i=x-;i<=n;i++)- f[i][]=;
- }
- else
- {for(int i=x+;i<=n;i++)
- f[i][]=;
- }
- }
- if(y-==)
- {if(x->)
- {for(int i=x-;i<=n;i++)
- f[i][]=;
- }
- else
- {for(int i=x+;i<=n;i++)
- f[i][]=;
- }
- }//十分恶心的初始化
for(int i=;i<=n;i++)//核心程序开始
{- for(int j=;j<=m;j++)
- { if((i==x&&j==y)||(i==x-&&j==y-)||
(i==x-&&j==y+)||(i==x-&&j==y-)||(i==x-&&j==y+)
||(i==x+&&j==y-)||(i==x+&&j==y+)||(i==x+&&j==y-)||
(i==x+&&j==y+))//暴力打表(其实可以用bool标记一下,但我不会)- continue;
- f[i][j]=f[i-][j]+f[i][j-];
- }
- }
- cout<<f[n][m];
- }//总之方程很好想,初始化很恶心
P1002过河卒的更多相关文章
- 洛谷 P1002过河卒
洛谷 P1002过河卒 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点 ...
- 洛谷P1002 过河卒 [2017年4月计划 动态规划15]
P1002 过河卒 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之 ...
- P1002 过河卒【dp】
P1002 过河卒 题目描述 棋盘上AAA点有一个过河卒,需要走到目标BBB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CCC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制 ...
- 洛谷 P1002 过河卒 【棋盘dp】
题目链接:https://www.luogu.org/problemnew/show/P1002 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点 ...
- 洛谷[P1002]过河卒
原题地址:https://www.luogu.org/problemnew/show/P1002 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点 ...
- 洛谷P1002 过河卒 题解 动态规划
题目链接:https://www.luogu.com.cn/problem/P1002 题目大意 棋盘上\(A\)点有一个过河卒,需要走到目标\(B\)点.卒行走的规则:可以向下.或者向右.同时在棋盘 ...
- P1002 过河卒
题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. ...
- luogu P1002 过河卒
题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. ...
- 洛谷P1002 过河卒
关于蒟蒻的我,刚刚接触DP.... 那么就来做一道简单DP吧.... 首先先看题: 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一 ...
- P1002 过河卒 【递推、简单动规】
题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒 ...
随机推荐
- lesson8-图像问答-小象cv
QA即图像问答:覆盖最全面的AI,ai完备性 动态模型:不同任务需要不同模型 or 不同细分任务需要不同模型参数 数据集: 1)VQA,显示图片+抽象场景:每个问题给10个不同答案:含有无图片答案(考 ...
- BFS模板
bool visit[maxn];///访问标记 ,,,,-,,-,}; ///向左上右下,左下,右上,右下,左上 ,,,-,-,,,-}; struct node { int r; int c; i ...
- java-继承的注意事项
1.子类只能继承父类所有非私有的成员(成员方法和成员变量). 2.子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法. 3.不要为了部分功能而去继承.
- CentOS安装备忘2
CentOS7安装备忘2 安装过程中不联网,安装完成也不要立刻联网,先关闭远程的服务后再联网更新.安装默认使用English,目的是生成的Home下所有文件夹都是英文的,方便使用. ========= ...
- C++学习(十六)(C语言部分)之 数组三
复习 以及 测试 /* 一维数组 数组是相同的数据的一个集合 <类型><数组名>[下标表达式]={数组元素 初始值}; 数组名和变量的命名规则是一样的 数组名是一个地址 数组下 ...
- Linux交叉工具链安装
这篇博文http://blog.csdn.net/u010957054/article/details/58056863 提到了一个好的百度网盘,里面有各个版本的交叉工具链. http://www.3 ...
- Caused by: java.sql.SQLException: ORA-24816: 在实际的 LONG 或 LOB 列之后提供了扩展的非 LONG 绑定数据
今天客户说报告草稿保存不了,跟踪错误bug,了解到以下reason: 异常出现的环境:oracle11g + Hibernate 错误分析:这是oracle 11g在clob字段中的一个bug,ora ...
- LeetCode - Baseball Game
You're now a baseball game point recorder. Given a list of strings, each string can be one of the 4 ...
- 【javaScript】数组的相关操作
数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长 ...
- mysql之commit,transaction事物控制
简单来说,transaction就是用来恢复为以前的数据. 举个例子,我想把今天输入到数据库里的数据在晚上的时候全部删除,那么我们就可以在今天早上的时候开始transaction事物,令autocom ...