笔试训练48天:过河卒
[NOIP2002 普及组] 过河卒_牛客题霸_牛客网https://www.nowcoder.com/practice/cc1a9bc523a24716a117b438a1dc5706?tpId230tqId40428ru/exam/oj知识点动态规划描述棋盘上 A点有一个过河卒需要走到目标 B点。卒行走的规则可以向下、或者向右。同时在棋盘上 C 点有一个对方的马该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示A 点 (0, 0)、B点(n,m)同样马的位置坐标是需要给出的。现在要求你计算出卒从 A点能够到达 B点的路径的条数假设马的位置(x,y)是固定不动的并不是卒走一步马走一步。注马一次跳跃到达的点(x1,y1)和马原坐标(x,y)的关系是 ∣x1−x∣∣y1−y∣3且x1≠x,y1≠y数据范围 1≤n,m≤20 1≤n,m≤20 马的坐标 0≤x,y≤20 0≤x,y≤201≤a,b,c,d≤1000 1≤a,b,c,d≤1000输入描述仅一行输入 n,m,x,y 四个正整数。分别表示B点坐标和马的坐标输出描述输出路径总数示例1输入6 6 3 3 输出6示例2输入5 4 2 3 输出3示例3输入2 5 3 5 输出1思路动态优化1.dp[i][j]状态表示:从[0][0]位置出发到达[i][j]位置一共有多少种方法2.状态转移方程:①dp[i][j]dp[i][j-1]dp[i-1][j]②若果走不到里面为03.初始化多加一行一列,dp[0][1]1或者dp[1][0]1;初始位置本来就是一个占位#include cwctype #include iostream using namespace std; int n,m,x,y; long long dp[25][25]; int main() { cinnmxy; x1;y1; dp[0][1]1; for(int i1;in1;i) { for(int j1;jm1;j) { if(i!xj!y abs(i-x)abs(j-y)3||(ixjy)) { dp[i][j]0; } else { dp[i][j]dp[i-1][j]dp[i][j-1]; } } } coutdp[n1][m1]endl; return 0; }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2511845.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!