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

HDU2082 找单词

时间:2019-08-30 22:48:46      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:size   using   mes   hdu   name   display   变量   work   mat   

问题分析

不难想到用母函数做。

令自变量\(x\)的次数就是单词价值,那么答案就是\(x\)\(1\)次到\(50\)次的系数之和。由于我们只需要处理前\(51\)项,所以暴力多项式相乘即可。

举个例子,第一组样例的母函数就是:
\[ G(x)=(1+x)(1+x^2)(1+x^3)=1+x+x^2+2x^3+x^4+x^5+x^6 \]
出去\(x\)\(0\)次项系数的和就是\(7\)

参考程序

#include <bits/stdc++.h>
using namespace std;

void Work();

int main() {
    int TestCases = 0;
    scanf( "%d", &TestCases );
    for( ; TestCases--; ) Work();
    return 0;
}

int A[ 110 ], B[ 110 ], C[ 110 ];

void Work() {
    memset( A, 0, sizeof( A ) );
    A[ 0 ] = 1;
    for( int i = 1; i <= 26; ++i ) {
        memset( B, 0, sizeof( B ) );
        int k; scanf( "%d", &k );
        B[ 0 ] = 1;
        for( int j = 1; j * i <= 50 && j <= k; ++j )
            B[ j * i ] = 1;
        memset( C, 0, sizeof( C ) );
        for( int j = 0; j <= 50; ++j )
            for( int k = 0; k <= 50; ++k ) 
                if( j + k <= 50 )
                    C[ j + k ] += A[ j ] * B[ k ];
        memcpy( A, C, sizeof( A ) );
    }
    int Ans = 0;
    for( int i = 0; i <= 50; ++i ) Ans += A[ i ];
    printf( "%d\n", Ans - 1 );
    return;
}

HDU2082 找单词

标签:size   using   mes   hdu   name   display   变量   work   mat   

原文地址:https://www.cnblogs.com/chy-2003/p/11437389.html

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