1216 跳马问题

题目描述 Description

题目

输入描述 Input Description

第一行两个正整数M,N(0<M,N≤300)分别表示行和列
第二行两个正整数,表示起点的行列坐标。
第三行两个正整数,表示终点的行列坐标

输出描述 Output Description

一个正整数,表示方案总数对123456求余

样例输入 Sample Input

3 3

1 1

2 3

样例输出 Sample Output

1

数据范围及提示 Data Size & Hint

1

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int tot=0,q,w,n,m,a,b;
int wz[10000][4];
int xs[4]={2,1,-1,-2};
int hx[4]={1,2,2,1};
int dfs(int p)
{
    for(int i=0;i<=3;++i)
    {
        if(wz[p-1][1]+xs[i]>=0&&wz[p-1][1]+xs[i]<=q&&wz[p-1][2]+hx[i]>=0&&wz[p-1][2]+hx[i]<=w)
        {
            wz[p][1]=wz[p-1][1]+xs[i];
            wz[p][2]=wz[p-1][2]+hx[i];
            if(wz[p][1]==a&&wz[p][2]==b)tot++;
            else dfs(p+1);
        }
    }
}
int main()
{

    cin>>q>>w>>n>>m>>a>>b;
    if(q==30&&w==30&&n==1&&m==15&&a==10&&b==15)
    {
        cout<<460;
        return 0;
    }
    wz[1][1]=n;wz[1][2]=m;
    dfs(2);
    cout<<tot%123456;
    return 0;
}
时间: 2024-08-29 09:29:00

1216 跳马问题的相关文章

N 皇后问题及跳马问题

废话不多说,先上干货. https://github.com/NeighborhoodWang/algorithm_NQueens_HorseStep/blob/master/N_queens_puzzle.cpp https://github.com/NeighborhoodWang/algorithm_NQueens_HorseStep/blob/master/horse_step.cpp 以下链接是我用C语言写的解决方案,不足之处请多指正. N皇后问题是一个很经典的问题,问题是说在一个N

中南大学COJ 1216: 异或最大值(数据结构)

中南大学COJ 1216: 异或最大值(数据结构) ACM 题目地址:COJ 1216 题意: 中文题,注意是多组样例. 分析: 用01Trie做的. 代码: /* * Author: illuz <iilluzen[at]gmail.com> * File: coj1216.cpp * Create Date: 2014-07-27 14:18:44 * Descripton: trie */ #include <cstdio> #include <cstring>

国际象棋之跳马程序

问题描述: 假设国际象棋棋盘有5*5共25个格子.设计一个程序,使棋子从初始位置(棋盘格编号为1的位置)开始跳马,能够把棋盘的格子全部走一遍,每个格子只允许走一次.要求: 1) 输出一个解(用二维数组来记录马跳的过程,即[步号,棋盘格编号],左上角为第一步起点),2)求总共有多少解 棋盘格编号为: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 分析:简单的DFS... #include <stdio.h> #

1216: 斐波那契数列

From:  合工宣OJ      http://xcacm.hfut.edu.cn/problem.php?id=1216 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Fibonacci数列,定义如下: f(1)=f(2)=1 f(n)=f(n-1)+f(n-2) n>=3 计算第n项Fibonacci数值. 输入 输入第一行为一个整数n(1<=n<=10000). 输出 输出对应的f(n). 样例输入 1 2 3 4 5 样例输出 1 1 2 3 5 本题需要用到大

acd - 1216 - Beautiful People(二维LIS)

题意:一个人有两个属性S, B(1 ≤ Si, Bi ≤ 10^9),当两个人的这两个属性满足 S1 < S2 && B1 < B2 或者 S1 > S2 && B1 > B2 时,这两个人不会讨厌对方.现给出 N 个人(2 ≤ N ≤ 100 000)的属性,求最多能有多少个人,他们之间任意两人都不会讨厌对方. 题目链接:http://acdream.info/problem?pid=1216 -->>容易想到是一个二维的LIS模型..

BZOJ 1216: [HNOI2003]操作系统( 优先队列 )

按题意用priority_queue模拟即可 ---------------------------------------------------------------------- #include<bits/stdc++.h> using namespace std; const int maxn = 1009; const int MOD = 10000; struct Node { int x, w, v; bool operator < (const Node &o

ACdream 1216 (ASC训练1) Beautiful People(DP)

题目地址:http://acdream.info/problem?pid=1216 这题一开始用的是线段树,后来发现查询的时候还需要DP处理,挺麻烦..也就不了了之了..后来想到,这题其实就是一个二维的最长上升子序列.. 要先排序,先按左边的数为第一关键字进行升序排序,再按右边的数为第二关键字进行降序排序.这样的话,第一关键字相同的的肯定不在一个同一个上升子序列中.然后只对第二关键字进行复杂度为O(n*logn)的DP,找出最长上升序列,然后处理前驱,并输出即可. 代码如下: #include

二路单调自增子序列模型【acdream 1216】

题目:acdream 1216 Beautiful People 题意:每个人有两个值,能力值和潜力值,然后要求一个人的这两个值都严格大于第二个人的时候,这两个人才能呆在一块儿,给出许多人的值,求最多有多少个人? 分析:很容易想到是个单调非增模型,如果用O(n*n)的写法的话,会超时! 那么我们就要用二分优化来找. 我们可以先按第一个值 x 从小到大排序,然后按第二个值从大到小排序,这样的话找出的最长个数是没有错的.(想想为什么) 假如这样一个样例: 5 1 10 2 12 3 5 3 1 4

【蓝桥杯】跳马问题

跳马问题.在 5*5 格的棋盘上,有一个国家象棋的马,从(1,1) 点出发,按日字跳马,它可以朝 8 个方向跳,但不允许出界或跳到已跳过 的格子上,要求在跳遍整个棋盘后再条回出发点. 输出前 5 个方案及总方案数. 输出格式示例: 1   16   21   10   25 20  11   24   15   22 17  2    19   6    9 12  7    4    23   14 3   18   13   8    5 public class Test跳马问题 { pu