HDOJ-2082-找单词 解题报告

       普通母函数基础题。把字母的价值作为x的指数然后就可以构造母函数为(1 + x + x^2 + ...)(1 + x^2 + x^4 + ...)...但是这里有一个需要注意的就是题目要求找到价值小于等于50的单词就行了,所以大于50的可以直接跳过。另外价值为0也就是没有英文字母这种不算单词。


       解题代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <map>

const int N = 51;

int coe[N], tmp[N];
int num[N];

void InitRead();

void Generate();

int main()
{
    int t;
    scanf("%d", &t);
    while (t--)
    {
        InitRead();
        Generate();
    }
    return 0;
}

void InitRead()
{
    memset(coe, 0, sizeof(coe));
    memset(tmp, 0, sizeof(tmp));
    coe[0] = 1;
    for (int i=1; i<=26; ++i)
    {
        scanf("%d", &num[i]);
    }
    return;
}

void Generate()
{
    for (int i=1; i<=26; ++i)
    {
        for (int j=0; j<=50; ++j)
        {
            if (coe[j] == 0) continue;
            for (int k=0; k<=num[i]; ++k)
            {
                if (k * i + j > 50) break;
                tmp[k * i + j] += coe[j];
            }
        }
        memcpy(coe, tmp, sizeof(coe));
        memset(tmp, 0, sizeof(tmp));
    }
    int ans = 0;
    for (int i=1; i<=50; ++i)   // 从1开始循环,不计算价值为0的次数
    {
        ans += coe[i];
    }
    printf("%d\n", ans);
    return;
}


猜你喜欢

转载自blog.csdn.net/JZQT_T/article/details/45560647