描述
lhcoder有乙個n行m列的棋盤,有一顆棋子從左上角(1,1)開始移動,每次只能往右或者往下移動一格,到右下角(n,m)一共有多少移動方案?
輸入有多組測試資料,每組測試資料中有兩個整數n和m(2 <= n, m <= 1000),代表為n行m列的棋盤。
輸出乙個整數p,代表從左上角(1,1)移動到右下角(n,m)的方案數,由於方案數可能比較大,結果請對99991取模。
樣例輸入1
複製
2 2
樣例輸出1
2
樣例輸入2
複製
2 3
樣例輸出2
3
檢視隱藏資訊
很簡單的一道題卻做錯了,大概是因為超時吧,兩種很有趣的解法:
#include #include #include #include using namespace std;
const int mod=99991;
int ans[1005][1005];
int n,m;
int dfs(int x,int y)
if(x==n&&y==m)
long long ret=0;
if(y+1<=m)
if(x+1<=n)
return ans[x][y]=ret;
}int main()
return 0;
}
#include #include #include using namespace std;
const int mod=99991;
int num[1005][1005];
void init()
for(int i=2;i<=1000;i++) }
return ;
}int main()
{ init();
int n,m;
while(~scanf("%d %d",&n,&m))
{cout << num[n][m] <
簡單的說就是很神奇的一些演算法,他的靈活度還需自己慢慢體會(再一次感悟到了簡單演算法的博大精深,主要自己太菜 )
棋盤裡的數學(qduoj 記憶化搜尋)
description lhcoder有乙個n行m列的棋盤,有一顆棋子從左上角 1,1 開始移動,每次只能往右或者往下移動一格,到右下角 n,m 一共有多少移動方案?input 有多組測試資料,每組測試資料中有兩個整數n和m 2 n,m 1000 代表為n行m列的棋盤。output 乙個整數p,代表...
棋盤(dfs 剪枝)
題目描述 有乙個m mm m的棋盤,棋盤上每乙個格仔可能是紅色 黃色或沒有任何顏色的。你現在要從棋盤的最左上角走到棋盤的最右下角。任何乙個時刻,你所站在的位置必須是有顏色的 不能是無色的 你只能向上 下 左 右四個方向前進。當你從乙個格仔走向另乙個格仔時,如果兩個格仔的顏色相同,那你不需要花費金幣 ...
DFS 棋盤行走
題目描述 解題思路 可以看出n m n mn m是真的小哇!所以直接爆搜就可以了 如果想保險一點,可以嘗試前3步爆搜,後面寬搜 code include include include include using namespace std const int way 4 2 int n,m,a 2...