P1002過河卒
阿新 • • 發佈:2019-02-12
提供幾組測試資料吧
8 7 3 2
102
14 16 4 5
10560723
20 20 10 10
21388094780
20 20 4 0
56477364570
首先想到的是從終點開始,向上,向左遞迴,超時。
故由遞迴推出了遞推式。
這兩天沒有狀態,差點被map[x][y]還是map[y][x]繞暈了,故作此提醒。
8 7 3 2
102
14 16 4 5
10560723
20 20 10 10
21388094780
20 20 4 0
56477364570
首先想到的是從終點開始,向上,向左遞迴,超時。
故由遞迴推出了遞推式。
這兩天沒有狀態,差點被map[x][y]還是map[y][x]繞暈了,故作此提醒。
#include <stdio.h> long long map[22][22]; int main() { int h1, h2, x, y, n[8][2] = {{1,-2},{-1,-2}, {-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1}};//馬可移動的8個位置 long long i, mX, mY; scanf("%d%d%d%d", &x, &y, &h1, &h2); map[0][1] = 1; h1++, h2++; x++, y++; map[h1][h2] = -1; for(i = 0; i < 8; i++) {//把馬領域標記好,後面不經過改點 mX = h1+n[i][0]; mY = h2+n[i][1]; if(mY>=1&&mY<=21 && mX>=1&&mX<=21) map[mX][mY] = -1; } for(i = 1; i <= x; i++) { for(int j = 1; j <= y; j++) { if(map[i][j] != -1) { mX = map[i-1][j]; mY = map[i][j-1]; if(mX > 0) map[i][j] += mX; if(mY > 0) map[i][j] += mY; } } } printf("%lld\n", map[x][y]); return 0; }