1. 程式人生 > >hdu 1028(普通型母函式)

hdu 1028(普通型母函式)

Ignatius and the Princess III

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


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 題目型別:普通型母函式 題目描述:問整數拆分有多少種形式 題目分析: 母函式又名生成函式,對於數列{ A(n) } n >= 0,∑(k>=0) A(k) * X^k = A(0)  + A(1) * X^1 + A(2) * X^2 +……+ A(k) * X ^ k 為數列{A(n)}的普通型母函式,簡稱普母函式。 記多重集 X = { n1x1, n2x2,……,nnxn}, x1,x2,x3,x4,……xn表示n個不同的元素。 ni(  1<= i <= n)為正整數或無窮,ni表示元素xi在計數問題中可取的最多的重數(無窮表示可取重數不受限制),稱  X = { n1x1, n2x2,……,nnxn} 為 x1,x2,x3,....,xn的多重集。 對於類似於多重集計數問題的組合問題,可以用普母函式來解決。 多重集中的每個元素,匯出一個相應的母函式。比如  nixi, ni = 2 xi = 4.那麼相應的母函式G(x) = 1 + x ^ 4 + x ^ 8 然後把生成的所有母函式相乘,即可求解問題。 模擬多項式相乘的時候,可以用 a[i] 的值 表示 x^i 的係數。 那麼 c * x^i  * d * x^j  就相當於 a[i] * b[j] ,結果為 r[i+j] = a[i] * b[j]。 程式碼如下:
#include <stdio.h>
#include <memory.h>
#define N 121

int result[N];
int temp[N];

void init(){
    int i,j,k;
    memset(result,0,sizeof(result));
    memset(temp,0,sizeof(temp));
    for( i = 0; i < N; i++) {
        result[i] = 1;
    }
    for( k = 2; k < N; k++){
        for( i = 0; i < N; i++){
            for( j = 0; j < N; j += k) {
                if( result[i] != 0 && i + j < N) {
                    temp[i+j] += result[i];
                }
            }
        }
        for( i = 0; i < N; i++){
            result[i] = temp[i];
            temp[i] = 0;
        }
    }
}


int main()
{
    init();
    int n;
    while(scanf("%d",&n) != EOF) {
        printf("%d\n",result[n]);
    }


    return 0;
}


相關推薦

hdu 1028(普通型函式)

Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6

hdu 1709(普通型函式)

The Balance Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3249    Accepted Su

B.找單詞——(HDU 2082 普通型函式

傳送門 找單詞 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S

hdu 1171(普通型函式)

Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 11501    Acce

HDU 1028函式或者dp)

“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<

hdu 2082--找單詞 普通型函式的應用

B - 找單詞 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u De

HDU 2082 普通型函數

ace () -1 分析 show pac include 分享 amp 分析: 組成單詞好說,價值如何體現? 改變指數就行,例如: 這樣,組成的單詞,指數就是權值,多項式相乘,指數小於50的就OK; 1 #include <b

2017多校訓練賽第一場 HDU 6042 (函式

Journey with Knapsack Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 164    A

普通型函式原理及模板程式碼詳解

母函式有很多種,最常用的有普通型母函式和指數型母函式。兩者區別是:普通型母函式主要是來求組合的方案數,而指數型母函式是求多重排列數。下面只講解普通型母函式的相關知識。定義:若函式G(x)=a0+a1*x

普通型函式

生成函式(母函式)有普通生成函式和指數生成函式: 1.普通生成函式用於解決多重集的組合問題 2.指數型母函式用於解決多重集的排列問題 母函式可以解決遞迴數列的通項問題:斐波那契數列、卡特蘭數列等 普通母函式:     構造母函式G(x), G(x) = a0 + a

普通型函式和指數型函式

母函式:摘自百度百科 生成函式即母函式,是組合數學中尤其是計數方面的一個重要理論和工具。生成函式有普通型生成函式和指數型生成函式兩種,其中普通型用的比較多。形式上說,普通型生成函式用於解決多重集的組合問題,而指數型母函式用於解決多重集的排列問題。母函式還可以解決遞迴數列的通

HDU 2152(函式

Problem Description 轉眼到了收穫的季節,由於有TT的專業指導,Lele獲得了大豐收。特別是水果,Lele一共種了N種水果,有蘋果,梨子,香蕉,西瓜……不但味道好吃,樣子更是好看。 於是,很多人們慕名而來,找Lele買水果。 甚至連大名鼎鼎的HDU ACM

hdu 2082(普通函式)

/*     hdu 2082     普通母函式     直接套模板就行     普通母函式主要解決組合問題     大概思路是開2個數組,c1[ ]儲存當前得到的多項式各項係數,c2[ ]儲存每次計算時的臨時結果,     (解釋下c1[a]=b,其中a為多項式中x的指

hdu 1709 (函式,有些特殊)

母函式。。 #include"stdio.h" #include"string.h" int main() { int a[10008]; int b[10008]; in

HDU 1709 (函式

The Balance Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot

hdu 1028 Ignatius 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): 12

HDU 1028 函式做法

題目連結 http://acm.hdu.edu.cn/showproblem.php?pid=1028 其實就是母函式模板,當然用DP也能做。 AC程式碼 https://github.com/Kiritow/OJ-Problems-Source/blob/master/H

HDU 1028 函式

Ignatius and the Princess IIIProblem Description "Well, it seems the first problem is too easy. I will let you know how foolish you are

hdu 1028 函式模板

#include <iostream> #include <cstring> #define mem(x, k) ((x), (k), sizeof(x)) #define M

hdu 1028 函式入門題

題意:給出n n<=120,拆分n的方法數? (1+x^2+x^3+..x^n) *(1+x^2+x^4+x^6+...) *(1+x^3+x^6+...)  第i個表示式代表了數i的選法:1代表不選i,1後的第j項(x^(ji))表示選j個i,求x^n的係數即可