反向遍历写dp数组+多1行和多1列哨兵简化代码
走方格的方案数
http://www.nowcoder.com/questionTerminal/e2a22f0305eb4f2f9846e7d644dba09b
#include<bits/stdc++.h> using namespace std; int dp[10][10]; void solve(int n, int m) { memset( dp, 0, sizeof( dp ) ); //行数n-0,列数m-0 dp[n][m]=1; for(int cow=n; cow>=0; --cow) { for(int row=m; row>=0; --row) { if( cow==n && row==m) { continue; } dp[cow][row]=dp[cow+1][row]+dp[cow][row+1]; } } } int main() { int n,m; while( ~scanf("%d%d",&n,&m)) { solve(n,m); printf("%d\n",dp[0][0]); } return 0; }