zoukankan      html  css  js  c++  java
  • 整数划分

    将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2,4} {1,2,3},共4种。由于数据较大,输出Mod 10^9 + 7的结果即可。

     

    Input输入1个数N(1 <= N <= 50000)。Output输出划分的数量Mod 10^9 + 7。Sample Input

    6

    Sample Output

    4

     每个数最多分成sqrt(n*2)个不一样的数,比如10分成1,2,3,4,其实就是(1 + 4) / 2 *4 = 10,max(j) = sqrt(n*2).把i分成j个数有两个来源途径1.i - j分成j个数,每个数+1,i - j分成j - 1个数+j.
    code:
    #include <iostream>
    #include <queue>
    #include <cmath>
    #define mod 1000000007
    using namespace std;
    long long dp[50010][320];
    int main()
    {
        int n;
        cin>>n;
        dp[0][0] = 1;
        for(int i = 1;i <= n;i ++)
        {
            for(int j = 1;j <= sqrt(i * 2);j ++)
            {
                dp[i][j] = (dp[i - j][j - 1] + dp[i - j][j]) % mod;
            }
        }
        long long ans = 0;
        for(int i = 1;i <= sqrt(n * 2);i ++)
        {
            ans = (ans + dp[n][i]) % mod;
        }
        cout<<ans;
    }
     
  • 相关阅读:
    要搜索内容
    .net core 过滤器
    C# => 写法
    js 数组的forEach 函数
    .net core 下载文件 其他格式
    win10 1903 更改文字大小
    fetch 写法
    C# 匿名对象 增加属性
    ping —— 虚拟机
    selenium验证车贷计算器算法
  • 原文地址:https://www.cnblogs.com/8023spz/p/8882963.html
Copyright © 2011-2022 走看看