站外题求助
  • 板块题目总版
  • 楼主houpingze
  • 当前回复4
  • 已保存回复4
  • 发布时间2020/8/6 18:31
  • 上次更新2023/11/6 21:06:30
查看原帖
站外题求助
253765
houpingze楼主2020/8/6 18:31

题目: 在一个n×m的棋盘上,左上角(0,0)处有一只象棋中的车。在某个位置(x,y)处有一个马。现在车朝着右下角(n,m)位置前进,但是前进的过程中不能走到马所在的点,以及马控制的那些位置。并且车每次只能朝着右方或下方前进。试求出车有多少种方案到达右下角。

样例输入 Sample Input

8 6 0 4

样例输出 Sample Output

266962

我的代码:

#include<iostream>
#include<map> 
#include<bits/stdc++.h>
typedef unsigned long long ull;
using namespace std;
int n,cnt,m,x,y;
map<ull,map<ull,ull> >f,ma;
int main(){
    cin>>n>>m>>x>>y;
    ma[x+2][y+1]=1;
    ma[x+1][y+2]=1;
    ma[x-1][y+2]=1;
    ma[x-2][y+1]=1;
    ma[x+2][y-1]=1;
    ma[x+1][y-2]=1;
    ma[x-1][y-2]=1;
    ma[x-2][y-1]=1;
    f[0][0]=1;
    for(int i=0;i<=n;i++){
        for(int j=0;j<=m;j++){
            if(i==x||j==y||ma[i][j]) continue;
            if(i==0&&j==0) continue;
            int sum=0;
            for(int k=0;k<=i;k++){
                sum+=f[k][j];
            }
            for(int k=0;k<=j;k++){
                sum+=f[i][k];
            } 
            f[i][j]=sum;
//			cout<<sum<<' ';
        }
//		cout<<endl;
    }
    cout<<f[n][m];
}

2020/8/6 18:31
加载中...