|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 柿子饼同学 于 2022-3-22 10:35 编辑
在此 --->https://www.luogu.com.cn/problem/P1002#include <bits/stdc++.h>
using namespace std;
int n, m, a, b;
int horse[][2] = {{2, 1}, {1, 2}, {-1, 2}, {-2, 1}, {-2, -1}, {-1, -2}, {1, -2}, {2, -1}};
int main(){
scanf("%d%d%d%d", &n, &m, &a, &b);
int m1[m+2][n+2];
m1[0][0] = 1;
m1[0][1] = 1;
m1[1][0] = 1;
bool map[m+2][n+2] = {1};
map[a][b] = 0;
for(int i = 0; i < 8; i++){
map[a+horse[i][0]][b+horse[i][1]] = 0;
}
for(int i = 2; i < m; i++){
for(int j = 2; j < n; j++){
if(!map[i][j]){
continue;
}
m1[i][j] = m1[i-1][j] + m1[i][j-1];
}
}
printf("%d", m1[m][n]);
return 0;
}
那啥 , 感觉我代码没啥问题 , 但是它就不输出了
思路是 , 用二维数组弄一个坐标系出来 , 把马和他的控制点标为 0 , 其他是 1 .然后用转移方程得到 F(x, y) = F(x-1, y) + F(x, y-1) , F()是走到这个点的所有方法之和
12 - 17行就只是普通数组,比如:
int A[5] = {1, 2, 3, 4, 5};
float B[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
char C[5] = {'A', 'B', 'C', 'D', 'E'};
Point D[5] = {{xxxxx}, {xxxxx}, ......... } // 数组里面装的就是 Point 构造
|
|