动态规划 计算二项式系数
2016-12-21 20:56
155 查看
动态规划计算二项式系数,主要用到了一个性质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为固定值):
[java]
view plain
copy
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;
}
}
Sy
4000
stem.out.println("c("+n+","+m+")="+arr
[m]);
}
}
代码2(求c(n,k):k=0……n):
[java]
view plain
copy
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
[i]);
}
}
}
这个式子将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为固定值):
[java]
view plain
copy
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;
}
}
Sy
4000
stem.out.println("c("+n+","+m+")="+arr
[m]);
}
}
代码2(求c(n,k):k=0……n):
[java]
view plain
copy
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
[i]);
}
}
}
相关文章推荐
- 动态规划——1 计算二项式系数
- 动态规划 — 计算二项式系数
- 动态规划计算矩阵连乘
- 动态规划实例(四):二项式系数问题
- 通过动态规划来精确计算概率值
- hdu 1466 计算直线的交点数 (简单的动态规划)
- leetcode 174. Dungeon Game 一个逆着推导计算的DP动态规划问题
- 动态规划,递归与非递归,FP 之野望,描述与计算
- 动态规划19 计算直线交点数
- 动态规划——二项式系数
- 动态规划:0-1背包问题(使用迭代方法,避免重复计算)
- 2988:计算字符串距离(2.6基本算法之动态规划)
- 动态规划——最长公共子序列计算
- POJ 1579 解法二用动态规划给递归剪枝,减少重复计算。此题一开始没想到用此法耗费了不少时间。
- 100道动态规划——4 UVA 1331 Maximum Triangulation DP 计算几何
- 动态规划——费用提前计算
- 动态规划入门 HDU 1466-计算直线的交点数
- 动态规划--计算字符串距离
- 动态规划(Dynamic programming,DP),通过把原问题分,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量:
- 动态规划:计算字符串距离