有一个X*Y的网格,小团要在此网格上从左上角到右下角,只能走格点且只能向右或向下走。请设计一个算法,计算小团有多少种走法。给定两个正整数int x,int y,请返回小团的走法数目。
import java.util.*;
public class Main {
/* **用组合数,总共需要x+y步,挑x步走,或者挑y步走
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long x=sc.nextInt();
long y=sc.nextInt();
System.out.println(jc(x+y)/(jc(x)*jc(y)));
}
private static long jc(long n){//阶乘
long sum=1;
for (long i = 1; i <= n ; i++) {
sum*=i;
}
return sum;
}
} 动态规划
import java.util.Scanner;
public class Main {
public static int ways(int x, int y){
if(x==1 || y==1){
return x*y+1;
}
return ways(x-1,y)+ways(x,y-1);
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int x = in.nextInt();
int y = in.nextInt();
System.out.println(ways(x,y));
}
}
}
基础的动态规划题
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int x=sc.nextInt()+1,y=sc.nextInt()+1;
int[][] dp = new int[x+1][y+1];
dp[1][0]=1;
for(int i=1;i<=x;i++){
for(int j=1;j<=y;j++){
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
System.out.print(dp[x][y]);
}
}