HDU 2082 普通型母函数

分析:

组成单词好说,价值如何体现?

改变指数就行,例如:

这样,组成的单词,指数就是权值,多项式相乘,指数小于50的就OK;

 1 #include <bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 int ch[30];
 6 int a[100];
 7 int b[100];
 8
 9
10 int main()
11 {
12     int t;
13     scanf("%d",&t);
14     while(t--) {
15         for(int i=1;i<=26;i++)
16             scanf("%d",&ch[i]);
17
18         memset(a,0,sizeof(a));
19         memset(b,0,sizeof(b));
20
21
22         b[0] = 1;
23
24         for(int i=1;i<=26;i++) {    //26个多项式相乘
25
26             for(int j=0;j<=50;j++) {    //前面50项加上新的多项式
27
28                 for(int k=0;k<=ch[i]&&k*i+j<=50;k++) {
29                     a[k*i+j] +=b[j];
30                 }
31             }
32             memcpy(b,a,sizeof(a));
33             memset(a,0,sizeof(a));
34
35         }
36         int cnt = 0;
37         for(int i=1;i<=50;i++) {
38             cnt+=b[i];
39         }
40         printf("%d\n",cnt);
41
42     }
43     return 0;
44 }

时间: 2024-11-05 12:35:39

HDU 2082 普通型母函数的相关文章

HDU 2082 找单词 --- 母函数

HDU 2082 找单词 起码通过这题,知道了母函数是什么东西,值得一做. /* HDU 2082 找单词 --- 母函数 */ #include <cstdio> #include <cstring> const int N = 50; int num[30], c1[N + 10], c2[N + 10]; int main() { #ifdef _LOCAL freopen("D:\\input.txt", "r", stdin); /

hdu 2082 找单词(母函数|多重背包)

http://acm.hdu.edu.cn/showproblem.php?pid=2082 每一个字母的价值固定,但数目不定.所以每个字母对应的表达式也不同,若第i个字母的个数为a[i],价值为i,那么它的母函数为(1+x^i+x^(2i)+.....+x^(a[i]*b[i])).那么将i属于[1,26]的母函数相乘得到的x^m(1<=m<=50)的系数相加就是答案. #include <stdio.h> #include <iostream> #include &

hdu 2082 母函数

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2082 找单词 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4035    Accepted Submission(s): 2887 Problem Description 假设有x1个字母A, x2个字母B,..... x26个字母Z,

hdu 2082 找单词(母函数)

找单词 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4971    Accepted Submission(s): 3537 Problem Description 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找

HDU 2082 找单词 (母函数入门)

[题目链接]click here~~ [题目大意] 假设有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,代表测试实例的个数.

组合数学 - 母函数的运用 + 模板 --- hdu : 2082

找单词 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4093    Accepted Submission(s): 2933 Problem Description 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找到

(母函数变形)hdu 2082 找单词

找单词 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4567    Accepted Submission(s): 3271 Problem Description 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找

HDU 1085 Holding Bin-Laden Captive! 活捉本拉登(AC代码)普通型母函数

题意:有面值分别为1.2.5的硬币,分别有num_1.num_2.num_5个,问不能组成的最小面值是多少?(0<=每种硬币个数<=1000,组成的面值>0) 思路:母函数解决.只有3个括号要作乘法,分别代表面值1.2.5所能组成的情况.需要两个数组,所能组成的最大值为num_1+2*num_2+5*num_5.如果在这个范围内都能组成,那么最小不能组成的面值为num_1+2*num_2+5*num_5+1.若没有1分钱的硬币,那么不能组成的肯定是1了. 数组的用法:ans[]保存第一个

HDU 2082 母函数模板题

生成函数,英文是Generating Function.恕本人不才,本文只介绍生成函数的其中一种用法. 生成函数是说,构造这么一个多项式函数g(x),使得x的n次方系数为f(n). 对于母函数,我看到最多的是这样两句话: 1.“把组合问题的加法法则和幂级数的乘幂对应起来.” 2.“把离散数列和幂级数一 一对应起来,把离散数列间的相互结合关系对应成为幂级数间的运算关系,最后由幂级数形式来确定离散数列的构造. “ 其实这两句话我也不算太懂.先放这里,说不定以后可能会慢慢理解吧. 还是先举个大牛博客中