zoukankan      html  css  js  c++  java
  • ACM HDU 1028Ignatius and the Princess III

    Ignatius and the Princess III

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 4680    Accepted Submission(s): 3280


    Problem Description
    "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!"
     

    Input
    The 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.
     

    Output
    For 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
     

    Author
    Ignatius.L
     
     
     
    母函数:
     
    #include<stdio.h>
    #include<iostream>
    using namespace std;
    const int MAXN=120;
    int c1[MAXN+1],c2[MAXN+1];
    void calc()
    {
        int i,j,k;
        for(i=0;i<=MAXN;i++)
          {c1[i]=1;c2[i]=0;}
        for(k=2;k<=MAXN;k++)
        {
          for(i=0;i<=MAXN;i++)
            for(j=0;j+i<=MAXN;j+=k)
            {
                c2[i+j]+=c1[i];
            }  
          for(i=0;i<=MAXN;i++)
          {
              c1[i]=c2[i];
              c2[i]=0;
          }       
        }    
    } 
    int main()
    {
        int n;
        calc();
        while(cin>>n)
        {
            cout<<c1[n]<<endl;
        }   
        return 0; 
    }  
    

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    #define MAXN 121
    int c1[MAXN],c2[MAXN];//c1存放目前所有函数的乘积,c2存放两个函数的临时乘积
    int maxn;
    void mufun(int n)
    {
        int i,j,k;
        for(i=0;i<=n;i++)
        {
            c1[i]=1;
        }
        for(k=2;k<=n;k++)
        {
            for(i=0;i<=n;i++)
            {
                for(j=0;j+i<=n;j+=k)
                {
                    c2[i+j]+=c1[i];
                }    
            }
            for(i=0;i<=n;i++)
            {
                c1[i]=c2[i];
                c2[i]=0;
            }        
        }         
    }
    int main()
    {
        int n,i;
        while(scanf("%d",&n)!=EOF)
        //while(cin>>n[0]>>n[1]>>n[2])
        {
         
            memset(c1,0,sizeof(c1));
            memset(c2,0,sizeof(c2));
            mufun(n);
            printf("%d\n",c1[n]);   
        }
        return 0;    
    }      
    
  • 相关阅读:
    书写高效的CSS
    _blank开新窗口不符合标准?
    IE6支持PNG透明(alpha通道)的4种方法
    jQuery插件支持天干地支阴历阳历万年历节假日红字显示记事等功能的日历插件(1)
    讓你的windowsXP支持四桌面,類似Ubuntu的效果
    MySql语句常见操作创建数据库,选择数据库,创建表,数据库中文乱码;
    解决<pre>标签里的文本换行(兼容IE, FF和Opera等)
    使用jquyer擴展方法定義屬於自己的氣泡提示
    jQuery插件通用input或textarea靜態ajax修改功能插件
    SEO的经验
  • 原文地址:https://www.cnblogs.com/kuangbin/p/2122192.html
Copyright © 2011-2022 走看看