递推式并不知自己推出来的,用来纪念一下学会了java的函数用法。。。
最后5分钟的时候,大姐头直接告诉我打表,但是我当场就蒙了,我怎么会用java打表(其实自己脑中想的就是要输出到文件中然后生成数组打表),真的是被自己的愚蠢傻哭了。
1 import java.util.*; 2 import java.math.*; 3 public class Main 4 { 5 static BigInteger dp[][] = new BigInteger[55][55]; 6 static void solve(int n, int k) {///函数原来这么用 7 for(int i=0; i<=n; ++i) 8 for(int j=0; j<=k; ++j) 9 dp[i][j] = BigInteger.ZERO; 10 for(int i=0; i<=n; ++i) 11 dp[0][i] = BigInteger.ONE; 12 for(int i=1; i<=n; ++i) { 13 for(int j=1; j<=k; ++j) { 14 for(int p=1; p<=i; ++p) { 15 dp[i][j] = dp[i][j].add(dp[i-p][j].multiply(dp[p-1][j-1])); 16 } 17 } 18 } 19 } 20 public static void main(String[] args) {///主函数 21 Scanner in = new Scanner(System.in); 22 int cnt = 1; 23 while(in.hasNext()) { 24 int n = in.nextInt(); 25 int k = in.nextInt(); 26 if(n==0 && k==0) 27 break; 28 solve(n, k); 29 if(cnt > 1) 30 System.out.println(""); 31 System.out.printf("Case %d: ", cnt++); 32 System.out.println(dp[n][k].subtract(dp[n][k-1])); 33 } 34 } 35 }
Java
时间: 2025-01-06 03:47:57