动态规划 计算二项式系数

动态规划计算二项式系数,主要用到了一个性质C(m,n)=C(m,n-1)+C(m-1,n-1);

这个式子将C(m , n)的计算问题表述为了问题描述)C(m-1 , n -1)和C(m -1,n)两个较小的交叠子问题

初始条件:C(m , m) = C(n , 0) = 1

得到c(n,k):


代码1(c(n,k):k为固定值):


  1. import java.util.Scanner;  
  2.   
  3. /** 
  4.  *  
  5.  * @author fool song 计算二项式 某一特定的值(记录表横向填) 
  6.  *  
  7.  */  
  8. public class BinoCoeff3 {  
  9.     public static void main(String[] args) {  
  10.         // C(n,m)  
  11.         System.out.println("求C(n,m)");  
  12.         System.out.println("输入n:");  
  13.         Scanner input = new Scanner(System.in);  
  14.         int n = Integer.valueOf(input.nextInt());  
  15.         System.out.println("输入m:");  
  16.         int m = Integer.valueOf(input.nextInt());  
  17.         getBinoCoeff(n,m);  
  18.     }  
  19.   
  20.     public static void getBinoCoeff(int n,int m) {  
  21.         int[][] arr = new int[n + 1][n + 1];  
  22.         boolean yn=true;  
  23.         for (int i = 0; i <= n; i++) {  
  24.             for (int j = 0; j < i + 1; j++) {  
  25.                 if (i == j || j == 0) {  
  26.                     arr[i][j] = 1;  
  27.                 } else {  
  28.                     arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];  
  29.                 }  
  30.                 if(i==n&&j==m){  
  31.                     yn=false;  
  32.                     break;  
  33.                 }  
  34.             }  
  35.             if(yn==false){  
  36.                 break;  
  37.             }  
  38.         }  
  39.         System.out.println("c("+n+","+m+")="+arr[n][m]);  
  40.     }  
  41.   
  42. }  


代码2(求c(n,k):k=0……n):


  1. import java.util.Scanner;  
  2.   
  3. /** 
  4.  *  
  5.  * @author fool song 计算二项式系数 求出所有项 
  6.  */  
  7. public class BinoCoeff2 {  
  8.     public static void main(String[] args) {  
  9.         // C(n,m)  
  10.         System.out.println("输入n:");  
  11.         Scanner input = new Scanner(System.in);  
  12.         int n = Integer.valueOf(input.nextInt());  
  13.         getBinoCoeff(n);  
  14.     }  
  15.   
  16.     public static void getBinoCoeff(int n) {  
  17.         int[][] arr = new int[n + 1][n + 1];  
  18.         for (int i = 0; i <= n; i++) {  
  19.             for (int j = 0; j < i + 1; j++) {  
  20.                 if (i == j || j == 0) {  
  21.                     arr[i][j] = 1;  
  22.                 } else {  
  23.                     arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];  
  24.                 }  
  25.             }  
  26.         }  
  27.         printf(arr, n);  
  28.     }  
  29.   
  30.     public static void printf(int[][] arr, int n) {  
  31.         for (int i = 0; i < n + 1; i++) {  
  32.             System.out.println("c("+n+","+i+")="+arr[n][i]);  
  33.         }  
  34.     }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值