码迷,mamicode.com
首页 > 其他好文 > 详细

母函数

时间:2017-08-07 22:12:35      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:this   find   scanf   open   each   eve   foolish   while   put   

"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\n", c1[n]);
    }
}
int main() {
    int t = 1;
    //freopen("in.txt", "r", stdin);
    //scanf("%d", &t);
    while(t--)
        solve();
    return 0;
}

 

母函数

标签:this   find   scanf   open   each   eve   foolish   while   put   

原文地址:http://www.cnblogs.com/gggyt/p/7301058.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!