zoukankan      html  css  js  c++  java
  • HDU_1028 Ignatius and the Princess III 【母函数的应用之整数拆分】

    题目:

    "Well, it seems the first problem is too easy. I will let you know how foolish you are later." feng5166 says. 

    "The second problem is, given an positive integer N, we define an equation like this: 
      N=a[1]+a[2]+a[3]+...+a[m]; 
      a[i]>0,1<=m<=N; 
    My question is how many different equations you can find for a given N. 
    For example, assume N is 4, we can find: 
      4 = 4; 
      4 = 3 + 1; 
      4 = 2 + 2; 
      4 = 2 + 1 + 1; 
      4 = 1 + 1 + 1 + 1; 
    so the result is 5 when N is 4. Note that "4 = 3 + 1" and "4 = 1 + 3" is the same in this problem. Now, you do it!" 

    InputThe input contains several test cases. Each test case contains a positive integer N(1<=N<=120) which is mentioned above. The input is terminated by the end of file. 
    OutputFor each test case, you have to output a line contains an integer P which indicate the different equations you have found. 
    Sample Input

    4
    10
    20

    Sample Output

    5
    42
    627

    题意分析:

    这题是对母函数的另一个应用,整数的拆分。

    我们可以把每个数的数值当作母函数经典例题中的砝码的质量。然后把需要凑的总数值当作砝码需要称的质量,这题就比较好理解了。

    打表,控制指数在120以内。

    AC代码:

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    const int MAXN = 120;
    int C1[MAXN+3], C2[MAXN+3];
    
    void solve()
    {
        int i, j, k;
        for(i = 0; i <= MAXN; i++)
        {
            C1[i] = 1;
            C2[i] = 0;
        }
        for(i = 2; i <= MAXN; i++)
        {
            for(j = 0; j <= MAXN; j++)
            {
                for(k = 0; k+j <= MAXN; k+=i)
                {
                    C2[k+j] += C1[j];
                }
            }
            for(j = 0; j <= MAXN; j++)
            {
                C1[j] = C2[j];
                C2[j] = 0;
            }
        }
    }
    
    
    int main()
    {
        int N;
        solve();
        while(scanf("%d", &N)!=EOF)
        {
            printf("%d
    ", C1[N]);
        }
        return 0;
    }
    

      

  • 相关阅读:
    OPPO R9sPlus MIFlash线刷TWRP Recovery ROOT详细教程
    OPPO R11 R11plus系列 解锁BootLoader ROOT Xposed 你的手机你做主
    努比亚(nubia) M2青春版 NX573J 解锁BootLoader 并进入临时recovery ROOT
    华为 荣耀 等手机解锁BootLoader
    青橙 M4 解锁BootLoader 并刷入recovery ROOT
    程序员修炼之道阅读笔03
    冲刺8
    典型用户模板分析
    学习进度八
    冲刺7
  • 原文地址:https://www.cnblogs.com/dybala21/p/9810664.html
Copyright © 2011-2022 走看看