題目描述
shopee的辦公室非常大,小蝦同學的位置坐落在右上角,而大門卻在左下角,可以把所有位置抽象爲一個網格(門口的座標爲0,0),小蝦同學很聰明,每次只向上,或者向右走,因爲這樣最容易接近目的地,但是小蝦同學不想讓自己的boss們看到自己經常在他們面前出沒,或者遲到被發現。他決定研究一下如果他不通過boss們的位置,他可以有多少種走法?
題解代碼
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int x = in.nextInt();
int y = in.nextInt();
int n = in.nextInt();
int a,b;
long[][] arr = new long[x+1][y+1];//注意是x+1 y+1 的矩陣
for(int i=0;i<n;i++){
a = in.nextInt();
b = in.nextInt();
arr[a][b] = -1;//將boss們的位置設置爲不可走
}
long count = countWay(x,y,arr);
System.out.println(count);
}
//方案數要用long類型,所以返回long類型
public static long countWay(int x,int y,long[][] arr){
for(int i = 0;i<= x ;i++)
arr[i][0] = 1;//座位和門在一行上
for(int i = 0;i<= y ;i++)
arr[0][i] = 1;//座位和門在一列上
for(int i = 1;i<= x;i++){
for(int j=1;j<= y;j++){
if(arr[i][j] == -1)
arr[i][j] = 0; //即不能走,此處方案數爲0
else
arr[i][j] = arr[i][j-1]+arr[i-1][j]; //動態規劃思想,動態方程
}
}
return arr[x][y];
}
}