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;
    }
    

      

  • 相关阅读:
    axios的使用/
    jQuery好玩的双向控制轮播
    vue的路由跳转方式/两种
    vfor的某些注意事项
    vue使用插件时不能撑满页面?
    swiper中的双向控制器不生效问题
    sass的安装及使用
    .net必懂题
    软件架构初读01
    EJB
  • 原文地址:https://www.cnblogs.com/dybala21/p/9810664.html
Copyright © 2011-2022 走看看