• 母函数


    "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

    代码:
    /*  gyt
           Live up to every day            */
    
    #include<cstdio>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #include<vector>
    #include<stack>
    #include<cstring>`
    #include<queue>
    #include<set>
    #include<string>
    #include<map>
    #include <time.h>
    #define PI acos(-1)
    using namespace std;
    typedef long long ll;
    typedef double db;
    const int maxn = 10000+5;
    const ll maxm = 1e7;
    const ll mod = 1e9 + 7;
    const int INF = 0x3f3f3f;
    const ll inf = 1e15 + 5;
    const db eps = 1e-9;
    int c1[maxn], c2[maxn];
    
    void solve() {
        int n;
        while(scanf("%d", &n)!=EOF) {
            for (int i=0; i<=n; i++) {
                c1[i]=1, c2[i]=0;
            }
            for (int i=2; i<=n; i++) {
                for (int j=0; j<=n; j++) {
                    for (int k=0; j+k<=n; k+=i) {
                        c2[j+k]+=c1[j];
                    }
                }
                for (int j=0; j<=n; j++) {
                    c1[j]=c2[j];
                    c2[j]=0;
                }
            }
            printf("%d
    ", c1[n]);
        }
    }
    int main() {
        int t = 1;
        //freopen("in.txt", "r", stdin);
        //scanf("%d", &t);
        while(t--)
            solve();
        return 0;
    }
  • 相关阅读:
    IE7局部滚动区域下绝对定位或相对定位元素不随滚动条滚动的bug
    Webstorm编译TypeScript报错
    Javascript动态创建 style 节点
    css多栏自适应布局
    禁用右键
    Mac下启动和停止Mysql服务
    codemirror
    JavaScript 中的事件流和事件处理程序(读书笔记思维导图)
    mac压缩文件乱码
    Mybatis框架五:动态SQL
  • 原文地址:https://www.cnblogs.com/gggyt/p/7301058.html
Copyright © 2020-2023  润新知