同志们,822题更优解他来啦!
经本人研究发现还可以用动态规划来写。
动态转移方程:dp[i][j]=dp[i][j-1]+dp[i-1][j];(因为只能向下或向右走所以可以从[i-1,j]和[i,j-1]来到[i,j]点)
dp[i][j]:x值为i时,y值为j时最多有几种走到i,j点的可能。
初始化:
for(int i=0;i<=m;i++) dp[0][i]=1; for(int i=0;i<=n;i++) dp[i][0]=1;
代码:
#include<bits/stdc++.h> using namespace std; int dp[1000][1000]={0},n,m; int main() { cin>>n>>m; for(int i=0;i<=m;i++) dp[0][i]=1; for(int i=0;i<=n;i++) dp[i][0]=1; for(int i=1;i<=n;i++)//注意要从1开始(后面有i-1) { for(int j=1;j<=m;j++)//注意要从1开始(后面有j-1) { dp[i][j]=dp[i][j-1]+dp[i-1][j]; } } cout<<dp[n][m]; return 0; }