题目
寻找路线
描述
小明在A点,他要到B点。从A到B有许多交错的路, 这些交错的路形成了有很多1*1的小正方形组成的长方形,长为l,宽为w。 他想知道A点到B点有几条最短路线可走。
输入格式
两个正整数l和w(0 < w <= l <= 33)。
输出格式
A点到B点的 最短路线的条数。
输入样例
3 2
输出样例
10
题目分析
明显的一道动态规划题目,
简单分析,发现左边和上面的相邻点加起来即为该点可走路线,有词得出状态转移方程:
dp[i][j]=dp[i-1][j]+dp[i][j-1];
坑点
开数组的大小
附上AC代码
代码如下
#include <iostream>
#include <cmath>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int l , w;
long long dp [33] [33]; //得到最终答案有可能超出int类型定义,防止数值越界
int main(){
cin >> l >> w;
for(int i=0;i<=w;i++){
for(int j=0;j<=l;j++){
dp[0][j]=1;
dp[i][0]=1;
} //数组路线初始化
}
for(int i=1;i<=w;i++){
for(int j=1;j<=l;j++){
dp[i][j]=dp[i-1][j]+dp[i][j-1]; //运用状态转移方程进行实现
}
}
cout<<dp[w][l]<<endl; //输出
return 0;
}