HDU2082 母函数

                                    找单词

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

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

Source

2006/1/15 ACM程序设计期末考试

Recommend

lcy

题解:普通母函数 乘完求x五十次幂前的系数和就行 

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int main()
{
    int t,a[60],b[60],num;
    cin>>t;
    while(t--)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        a[0]=1;
        for(int i=1; i<=26; i++)
        {
            scanf("%d",&num);
            if(num==0)
                continue;
            for(int j=0; j<=50; j++)
                for(int k=0; k<=num&&k*i+j<=50; k++)
                    b[k*i+j]+=a[j];
            for(int j=0; j<=50; j++)
            {
                a[j]=b[j];
                b[j]=0;
            }
        }
        int ans=0;
        for(int i=1; i<=50; i++)
            ans+=a[i];
        printf("%d\n",ans);
    }
    return 0;
}
时间: 2024-09-12 20:28:25

HDU2082 母函数的相关文章

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

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.基本模型:

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.那么,对于给定的字母

HDU1028 拆分数母函数

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

【算法小总结】母函数模板

研究以下多项式乘法: 可以看出: x2项的系数a1a2+a1a3+...+an-1an中所有的项包括n个元素a1,a2, -an中取两个组合的全体: 同理:x3项系数包含了从n个元素a1,a2, -an中取3个元素组合的全体: 以此类推.  特例: 若令a1=a2= -=an=1,在(8-1)式中a1a2+a1a3+...+an-1an项系数中每一个组合有1个贡献,其他各项以此类推.故有: 母函数定义: 对于序列a0,a1,a2,-构造一函数: n称函数G(x)是序列a0,a1,a2,-的母函数

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): 16394    Accepted Submission(s): 11552 Problem Description "Well, it seems the first problem is too easy. I

Thinkphp单字母函数使用指南_php技巧

A方法 A方法用于在内部实例化控制器,调用格式:A('[项目://][分组/]模块','控制器层名称') 最简单的用法: 复制代码 代码如下: $User = A('User'); 表示实例化当前项目的UserAction控制器(这个控制器对应的文件位于Lib/Action/UserAction.class.),如果采用了分组模式,并且要实例化另外一个Admin分组的控制器可以用: 复制代码 代码如下: $User = A('Admin/User'); 也支持跨项目实例化(项目的目录要保持同级)

ThinkPHP单字母函数(快捷方法)使用总结_php实例

在ThinkPHP中有许多使用简便的单字母函数(即快捷方法),可以很方便开发者快速的调用,但是字母函数却不方便记忆,本文将所有的字母函数总结一下,以方便以后查找. 1.U() URL组装 支持不同URL模式 U($url='',$vars='',$suffix=true,$domain=false)   @param string $url URL表达式,格式:'[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...'   @param string|array $vars 传入的

HDOJ/HDU 1085 Holding Bin-Laden Captive!(非母函数求解)

Problem Description We all know that Bin-Laden is a notorious terrorist, and he has disappeared for a long time. But recently, it is reported that he hides in Hang Zhou of China! "Oh, God! How terrible! " Don't be so afraid, guys. Although he hi

母函数与排列组合

在谈论母函数问题之前,我们先看一个简单的问题描述:假如有两组数据(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