zoukankan      html  css  js  c++  java
  • 划分数问题 DP

    《挑战程序设计竞赛》2.3.3

    :有n个无区别的物品,将他们划分成不超过m组,求出划分方法数模M的余数

    称做n的m划分,dp定义如下:

    dp[ i ] [ j ] =j的i划分的总数;

    考虑n的m划分ai (a1+a2+a3+...+am ==n) ,对于每个i都有ai>0,,So..{ai-1} 也就对应了n-m的m划分 ,..另,如果存在ai==0,那么这就对应了n的m-1划分,,

    所以,,有以下递推关系

    dp [ i ][ j ]=dp[ i ][ j-1 ]+dp[ i-1 ][ j ]; 

    复杂度为O(nm)

    #include <iostream>
    #include<cstdio>
    using namespace std;
    int dp[100][100];
    int main()
    {
        freopen("1.txt","r",stdin);
        int n,m,M;
        while(cin>>n>>m>>M)
        {
            dp[0][0]=1;
            for(int i=1; i<=m; i++)
                for(int j=0; j<=n; j++)
                {
                    if(j-i>=0)
                        dp[i][j]=(dp[i-1][j]+dp[i][j-i])%M;
                    else
                        dp[i][j]=dp[i-1][j];
    
                }
            cout<<dp[m][n]<<endl;
        }
    
        return 0;
    }


     

  • 相关阅读:
    Pyton项目打包成exe文件
    App数据指标
    电商基础指标体系
    Matplotlib复杂作图
    Sklearn之聚类分析
    Seaborn可视化
    Matplotlib可视化2
    Matplotlib可视化1
    Pandas可视化
    Linux常用指令(3)
  • 原文地址:https://www.cnblogs.com/frankM/p/4399503.html
Copyright © 2011-2022 走看看