小兔的棋盘
- 递推。
- 因为不能越过对角线,而对角线上的子路径数目可以由对角线上下两边相加而得,因此在从对角线出发的某子路径要减去对角线另一边的路径数目。
- 要用长整型。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int cnt=0;
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()) {
int n = sc.nextInt();
if(n==-1) {
break;
}
else {
long dp[][] = new long [40][40];
dp[0][0]=1;
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++) {
if(i==0&&j==0) {
continue;
}
if(i-1>=0) {
dp[i][j]+=dp[i-1][j];
if(i-1==j&&i>1) {
dp[i][j]-=dp[i-2][j];
}
}
if(j-1>=0) {
dp[i][j]+=dp[i][j-1];
if(i==j-1&&j>1) {
dp[i][j]-=dp[i][j-2];
}
}
}
cnt++;
System.out.println(cnt+" "+n+" "+dp[n][n]);
}
}
return;
}
}