• 整数划分






    点击查看代码
    
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    
    using namespace std;
    const int N = 110;
    
    int dp[N][N];
    int f[N][N];
    int g[N][N];
    
    int main()
    {
        int n, k;
        while(~scanf("%d%d", &n, &k))
        {
            // 问题1.将n划分成若干正整数之和的划分数
            memset(dp, 0, sizeof dp);
            for(int i = 1; i <= n; i++)
            {
                for(int j = 1; j <= n; j++)
                {
                    if(i < j)   dp[i][j] = dp[i][i];
                    else if(i == j) dp[i][j] = 1 + dp[i][j - 1];
                    else    dp[i][j] = dp[i - j][j] + dp[i][j - 1];
                }
            }
            printf("%d\n", dp[n][n]);
            
            // 问题2.将n划分成k个正整数之和的划分数
            memset(dp, 0, sizeof dp);
            for(int i = 1; i <= n; i++)
            {
                for(int j = 1; j <= n; j++)
                {
                    if(i < j)   dp[i][j] = 0;
                    else if(i == j) dp[i][j] = 1;
                    else    dp[i][j] = dp[i - 1][j - 1] + dp[i - j][j];
                }
            }
            printf("%d\n", dp[n][k]);
            
            // 问题3.将n划分成最大数不超过k的划分数
            memset(dp, 0, sizeof dp);
            for(int i = 1; i <= n; i++)
            {
                for(int j = 1; j <= n; j++)
                {
                    if(i < j)   dp[i][j] = dp[i][i];
                    else if(i == j) dp[i][j] = 1 + dp[i][j - 1];
                    else    dp[i][j] = dp[i - j][j] + dp[i][j - 1];
                }
            }
            printf("%d\n", dp[n][k]);
            
            // 问题4.将n划分成若干个奇正整数之和的划分数
            memset(f, 0, sizeof f);
            memset(g, 0, sizeof g);
            f[0][0] = 1, g[0][0] = 1;
            for(int i = 1; i <= n; i++)
            {
                for(int j = 1; j <= n; j++)
                {
                    g[i][j] = f[i - j][j];
                    f[i][j] = f[i - 1][j - 1] + g[i - j][j];
                }
            }
            int ans = 0;
            for(int i = 0; i <= n; i++) ans += f[n][i];
            printf("%d\n", ans);
            
            // 问题5.将 n 划分成若干不同整数之和的划分数
            memset(dp, 0, sizeof dp);
            for(int i = 1; i <= n; i++)
            {
                for(int j = 1; j <= n; j++)
                {
                    if(i < j)   dp[i][j] = dp[i][i];
                    else if(i == j) dp[i][j] = 1 + dp[i][j - 1];
                    else    dp[i][j] = dp[i - j][j - 1] + dp[i][j - 1];
                }
            }
            printf("%d\n\n", dp[n][n]);
        }
        
        return 0;
    }
    
  • 相关阅读:
    17.1 Replication Configuration 复制配置
    用 Flask 来写个轻博客 (3) — (M)VC_连接 MySQL 和 SQLAlchemy
    用 Flask 来写个轻博客 (2) — Hello World!
    Mysql表分区的利弊
    用 Flask 来写个轻博客 (1) — 创建项目
    RPM方式安装MySQL5.6
    Chapter 17 Replication
    14.8.11 Physical Structure of an InnoDB Index InnoDB Index 的物理结构
    14.8.9 Clustered and Secondary Indexes
    中小企业如何建立商业智能
  • 原文地址:https://www.cnblogs.com/wzxbeliever/p/16063096.html
Copyright © 2020-2023  润新知