zoukankan      html  css  js  c++  java
  • 组合数学

    Ignatius and the Princess III

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


    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
     
     

    Mean: 

     给你一个n,问你n的拆分有多少种。

    analyse:

     经典的母函数运用题,不解释。

    Time complexity:O(n^3)

    Source code:

    // Memory   Time
    // 1347K     0MS
    // by : Snarl_jsb
    // 2014-09-18-15.21
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<iostream>
    #include<vector>
    #include<queue>
    #include<stack>
    #include<map>
    #include<string>
    #include<climits>
    #include<cmath>
    #define N 1000010
    #define LL long long
    using namespace std;
    int c1[300],c2[300];
    int main()
    {
        ios_base::sync_with_stdio(false);
        cin.tie(0);
    //    freopen("C:\Users\ASUS\Desktop\cin.cpp","r",stdin);
    //    freopen("C:\Users\ASUS\Desktop\cout.cpp","w",stdout);
        int n;
        while(cin>>n)
        {
            memset(c1,0,sizeof(c1));
            memset(c2,0,sizeof(c2));
            for(int i=0;i<=n;++i)
            {
                c1[i]=1;
            }
            for(int i=2;i<=n;i++)
            {
                for(int j=0;j<=n;++j)
                {
                    for(int k=0;k<=n;k+=i)
                    {
                        c2[k+j]+=c1[j];
                    }
                }
                for(int j=0;j<=n;++j)
                {
                    c1[j]=c2[j];
                    c2[j]=0;
                }
            }
            cout<<c1[n]<<endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    webpy使用mysql数据库操作(web.database)
    python MySQLdb Windows下安装教程及问题解决方法(python2.7)
    python使用模板手记
    React常用方法手记
    PHP进阶知识
    Javascript文件加载:LABjs和RequireJS
    Debug的F5~F8用法
    myeclipse中导入的jquery文件报错(出现红叉叉,提示语法错误)
    Spring-data-jpa详解
    <c:if test="value ne, eq, lt, gt,...."> 用法
  • 原文地址:https://www.cnblogs.com/crazyacking/p/3979326.html
Copyright © 2011-2022 走看看