本文主要是介绍动态规划 计算二项式系数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
动态规划计算二项式系数,主要用到了一个性质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为固定值):
- import java.util.Scanner;
- /**
- *
- * @author fool song 计算二项式 某一特定的值(记录表横向填)
- *
- */
- public class BinoCoeff3 {
- public static void main(String[] args) {
- // C(n,m)
- System.out.println("求C(n,m)");
- System.out.println("输入n:");
- Scanner input = new Scanner(System.in);
- int n = Integer.valueOf(input.nextInt());
- System.out.println("输入m:");
- int m = Integer.valueOf(input.nextInt());
- getBinoCoeff(n,m);
- }
- public static void getBinoCoeff(int n,int m) {
- int[][] arr = new int[n + 1][n + 1];
- boolean yn=true;
- for (int i = 0; i <= n; i++) {
- for (int j = 0; j < i + 1; j++) {
- if (i == j || j == 0) {
- arr[i][j] = 1;
- } else {
- arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
- }
- if(i==n&&j==m){
- yn=false;
- break;
- }
- }
- if(yn==false){
- break;
- }
- }
- System.out.println("c("+n+","+m+")="+arr[n][m]);
- }
- }
代码2(求c(n,k):k=0……n):
- import java.util.Scanner;
- /**
- *
- * @author fool song 计算二项式系数 求出所有项
- */
- public class BinoCoeff2 {
- public static void main(String[] args) {
- // C(n,m)
- System.out.println("输入n:");
- Scanner input = new Scanner(System.in);
- int n = Integer.valueOf(input.nextInt());
- getBinoCoeff(n);
- }
- public static void getBinoCoeff(int n) {
- int[][] arr = new int[n + 1][n + 1];
- for (int i = 0; i <= n; i++) {
- for (int j = 0; j < i + 1; j++) {
- if (i == j || j == 0) {
- arr[i][j] = 1;
- } else {
- arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
- }
- }
- }
- printf(arr, n);
- }
- public static void printf(int[][] arr, int n) {
- for (int i = 0; i < n + 1; i++) {
- System.out.println("c("+n+","+i+")="+arr[n][i]);
- }
- }
- }
这篇关于动态规划 计算二项式系数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!