题目描述
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];
}
}