zoukankan      html  css  js  c++  java
  • 1-求组合数(c(n, m))的几种方法

    1.求C(n, m)

    动态规划(递归+记忆数组)

    递推关系为:C(n, m) = C(n-1, m) + C(n - 1, m - 1),C(n, m)表示为从n个数中选出m个出来,可以基于最后一个元素考虑分解为两种情况:1:选择最后个元素则后面情况为从n-1中再选出m-1个即可:C(n - 1, m - 1),  2:不选择最后一个元素则情况为从剩余的n-1个中选择m个元素:C(n - 1, m ).。所以总情况就是两者的和。 所以:C(n, m) = C(n-1, m) + C(n - 1, m - 1) ==》其实这就是组合数学上的性质:C(n, m) + C(n, m - 1) = C(n + 1, m)

    long long f(long long n, long long m){ 
    	if(a[n][m]){
    		return a[n][m];
    	}
        if(m == 1){
        	return a[n][m] = n;
        }
        if(m == 0){
        	return a[n][m] = 1;
        }
        if(n < m){
        	return a[n][m] = 0;
        }
        if(n == 1)
        	return a[n][m] = 1;
        return a[n][m] = f(n - 1, m) + f(n - 1, m - 1);
    }
    

     菲波那切数列思想:

    nm 00 01 02 03 04 05
    1 1 1        
    2 1 2 1      
    3 1 3 3 1    
    4 1 4 7 4 1  
    5 1 5 11 11 5 1

      例题:
    long long f(long long n, long long m){ a[0]=1; for(int i=1;i<=n;i++){ a[i]=1; for(int j=i-1;j>0;j--){ a[j]=a[j]+a[j-1]; } } return a[m]; }

    链接:https://www.nowcoder.com/acm/contest/67/H
    来源:牛客网

    题目描述

        现在有一个大小n*1的收纳盒,我们手里有无数个大小为1*1和2*1的小方块,我们需要用这些方块填满收纳盒,请问我们有多少种不同的方法填满这个收纳盒

    输入描述:

    第一行是样例数T
    第2到2+T-1行每行有一个整数n(n<=80),描述每个样例中的n。

    输出描述:

    对于每个样例输出对应的方法数
    示例1

    输入

    3
    1
    2
    4

    输出

    1
    2
    5
    #include <iostream>
    using namespace std;
    int n;
    long long a[1000];
    long long f(long long n, long long m){ 
        a[0]=1;  
        for(int i=1;i<=n;i++){  
            a[i]=1;  
            for(int j=i-1;j>0;j--){  
                a[j]=a[j]+a[j-1];   
            }  
        }   
        return a[m];
    }
    
    long long count = 0;
    int main(){
    	int t;
    	cin >> t;
    
    	while(t--){
    		cin >> n;
    		count = 0;
    		for(int i = 0; i <= n / 2; i++){		
    			count += f(n - i, i);
    		}
    		cout << count << endl;	 
    	}
    	
    	return 0;
    } 
    

      

  • 相关阅读:
    2018 桂林ccpc现场赛 总结
    2018 南京icpc现场赛总结
    nowcoder 203J Graph Coloring I(dfs)
    nowcoder 203A Knight(贪心+打表)
    nowcoder 202H-卡牌游戏
    nowcoder 202F-平衡二叉树
    topcoder srm 738 div1 FindThePerfectTriangle(枚举)
    codeforces 1041 E.Vasya and Good Sequences(暴力?)
    hdu 3507 Print Article(dp+斜率优化)
    hdu 1007 Quoit Design(分治)
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/8325086.html
Copyright © 2011-2022 走看看