B.找单词——(HDU 2082 普通型母函数)

传送门

找单词

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5721    Accepted Submission(s): 4026

Problem Description

假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26。那么,对于给定的字母,可以找到多少价值<=50的单词呢?单词的价值就是组成一个单词的所有字母的价值之和,比如,单词ACM的价值是1+3+14=18,单词HDU的价值是8+4+21=33。(组成的单词与排列顺序无关,比如ACM与CMA认为是同一个单词)。

 

Input

输入首先是一个整数N,代表测试实例的个数。
然后包括N行数据,每行包括26个<=20的整数x1,x2,.....x26.

 

Output

对于每个测试实例,请输出能找到的总价值<=50的单词数,每个实例的输出占一行。

 

Sample Input


2
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
9 2 6 2 10 2 2 5 6 1 0 2 7 0 2 2 7 5 10 6 10 2 10 6 1 9

 

Sample Output


7
379297

 

解题思路:

这是一个母函数的题,因为ACM与CMA认为是同一个单词,因为这是组合问题,所以这不是指数型的母函数。在下一篇博客中会详细介绍一下关于普通型母函数的知识点。这里就简单的说几句,就拿第一个例子来说吧,就拿第一个例子来说吧,我们可以这样想因为A, B, C的字母只有一个而且他们的价值还不相同,A=1,B=2,C=3,所以我们可以组成的单词可以是(1+X)
* (1+X^2) * (1+X^3) == 1 + X + X^2 + 2*X^3 + X^4 + X^5 + X^6,所以价值不 小于50的就是 <=50的 X 的系数加起来, But没有X^0前面的系数不需要,因为没有字母就不是单词,想明白这个之后就是写程序了, 请看我的代码:

My Code:

#include <iostream>
using namespace std;

int c1[55];///每一次存的多项式中的数
int c2[55];///中间转化变量
int arr[30];///输入的价值数组

///初始化
void Init()
{
    for(int i=0; i<55; i++)
    {
        c1[i] = 0;
        c2[i] = 0;
    }
}

int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        Init();
        for(int i=1; i<=26; i++)
            cin>>arr[i];
        c1[0] = 1;
        for(int i=1; i<=26; i++)///一共26个多项式相乘
        {
            for(int j=0; j<=50; j++)///指数最多是50
            {
                for(int k=0; k<=arr[i] && k*i+j<=50; k++)///循环次数,k*i也是指数,就是多项式相乘
                {
                    c2[k*i+j] += c1[j];
                }
            }
            for(int j=0; j<=50; j++)///c1才是系数
            {
                c1[j] = c2[j];
                c2[j] = 0;
            }
        }
        int ret = 0;
        for(int i=1; i<=50; i++)///指数是0的不算单词
            ret += c1[i];
        cout<<ret<<endl;
    }
    return 0;
}
时间: 2024-09-23 04:24:07

B.找单词——(HDU 2082 普通型母函数)的相关文章

java-有人在吗?有个题目不会求帮助,快速找单词游戏

问题描述 有人在吗?有个题目不会求帮助,快速找单词游戏 android java该游戏在一个N*N的方格中随机产生N*N个字母,玩家在这些字母中按一定规则找出合法的单词,最后有系统对玩家的结果进行打分. 解决方案 http://tieba.baidu.com/p/641716463 解决方案二: 请问你这是用树相关的知识做的吗 解决方案三: 1.随机 2.单词库比对 3.打分规则,单次数.长度

普通型母函数详解及其模板类型

PS:还记得第一次接触普通型母函数(也就是生成函数)还是在离散数学的课本上,当时也不太会敲代码,仅限于能够手动计算,现在就要详细的介绍一下关于母函数的内容了: 普通型母函数又叫生成函数, 1.定义:设G(x) = a0 + a1*x + a2*x^2 + ... + an*x^n + ...,就称G(x) 是序列{an}的生成函数: Eg:{C(n,m)}的生成函数是 (1+x)^m,{k^n}的生成函数是 G(x) = 1+k*x+k^2*x^2+.. == 1/(1-k*x) 2.基本模型:

Java字符串中找单词出现个数?

问题描述 统计这篇短文用了多少个单词"to".TherewasanAmericancouplewhohadnochildren,sotheywantedtoadoptachild.Finally,anorphanagecontactedthem,saying,"Wehaveababyforadoption.It'saRussianorphan."Thecouplewasdelightedandwenttobringthebabyhome.Onthewayhome,t

c++ primer-查找单词出现位置!!!

问题描述 查找单词出现位置!!! 文本查询程序支持的操作: 查找指定txt文档中符合以下复合逻辑的单词的首尾地址: c)必须支持某种形式的布尔值查询语言. ●&&:在一行中,两个单词不仅存在,而且相邻: ●||:在一行中,两个单词至少有一个存在: ●!:在一行中,该单词不存在: ●():把子查询组合起来的方式. eg: txt: hello I am a good boy and he is a good boy two! 查找符合(a&&good)!he 结果:为a go

HDU2082 母函数

                                    找单词                                               Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)                                                               Total Submission(s):

母函数与排列组合

在谈论母函数问题之前,我们先看一个简单的问题描述:假如有两组数据(A,B)和(C,D),每组中选出一个构成一个组合,总共有几种选法?很显然总共有4种选法:AC,AD,BC,BD.而且很容易联想到这个式子(A+B)*(C+D)=A*C+A*D+B*C+B*D.式子中的几个乘积项就是上面的4种选法.假如把问题换一下:每组中选出一个或0个数据构成组合,总共有几种组合?那么结果就变成:{空},A,B,C,D,AC,AD,BC,BD,而式子(1+A+B)*(1+C+D)=1+C+D+A+A*C+A*D+B

如何实现查找和单词汉语释义对

问题描述 usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace单词本{classProgram{staticvoidMain(string[]args){string[]str={""};for(inti=0;i<str.Length;i++){Console.Write("请输入一个单词:");str[i]=Console.ReadLin

java实现单词搜索迷宫游戏_java

本文实例讲述了java实现单词搜索迷宫游戏.分享给大家供大家参考.具体分析如下: 我们在杂志上,经常能够看到找单词的小游戏,在一个二维表格中,存在各种字母,我们可以从八个方向找单词.这个用计算机处理十分方便,但是,算法的好坏很重要,因为要是用蛮力算法实现,那么耗费的时间是不可想象的. 这是数据结构与问题求解Java语言描述一书中给的实现思路 完整代码如下,注释写的很明白了 import java.io.BufferedReader; import java.io.FileReader; impo

杭电ACM 2000-&amp;gt;2099 100道题 详细解题报告出炉

我去年暑假花了5天,把杭电ACM网站上2000到2099这100道题全AC了,又花了10来天精心写解题报告.里面包括题目.解题思路.编程技巧以及参考源码.所有代码都是使用C/C++写的. 最近整理资料时无意间发现,打包成chm文件和大家分享.我已经上传到CSDN上了.下载地址:http://download.csdn.net/source/492194 也可到我的Google Sites上下载. 题号 题名 题号 题名 2000 ASCII码排序 2001 计算两点间的距离 2002 计算球体积