农场耕作
Description
你是一位农夫,拥有一块 m x n 的小农场。你打算在这块农场上耕种不同的农作物,以便在季节结束时获得最大的收成。
农场被分割成网格,每个格子代表不同的耕种区域,你可以选择每次向下或向右移动一格来耕作。请计算有多少种不同的路径可以让你实现这一目标。保证题目数据小于等于2*10^9
Input
第一行输入一个整数m,表示有多少行
第二行输入一个整数n,表示有多少列
Output
输出一个整数表示路径数量
Sample
代码
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
int n = scanner.nextInt();
Main main = new Main();
System.out.println(main.uniquePaths(m,n));
}
public int uniquePaths(int m, int n) {
int[][] dp = new int[m+1][n+1];
for(int k =0;k<=m;k++){
dp[k][1] = 1;
}
for(int k =0;k<=n;k++){
dp[1][k] = 1;
}
for(int i = 2;i<=m;i++)
for (int j = 2;j<=n;j++){
dp[i][j] = dp[i-1][j]+dp[i][j-1];
}
return dp[m][n];
}
}
思路
动态规划
或者看做排列组合,把向右看做0,向下看做1
本质上是对m-1+n-1个操作进行选取n-1或者m-1的组合数
举例7和3, 也就是对8个操作选取6个下操作或者2个右操作