hdoj 2082 找单词 【母函数】

来源:互联网 发布:python 条码 编辑:程序博客网 时间:2024/06/08 02:05

题意:a~z的价值分别是1~26,给出你a~z的个数,问最多能组成价值不同的种类数。

策略:母函数。

典型的母函数题,但是这是属于给你有限个数目的题,要小心。

直接上代码:

#include<string.h>#include<stdio.h>int ans[55];int c1[100], c2[100];int main(){int a[27], t, i, j, k;scanf("%d", &t);while(t --){memset(c1, 0, sizeof(c1));//初始化memset(c2, 0, sizeof(c2));for(i = 1; i <= 26; i ++){scanf("%d", &a[i]);}c1[0] = 1;价值为0的种类初始化为1for(i = 1; i <= 26; i ++){if(a[i] == 0){ //跳过数目为0的continue;}for(j = 0; j <= 50; j ++){  //突然想到这里的j为什么要小于等于50呢?仔细分析了一下,应该是某一循环的时候可能的j+k要大于a[i]*i, 同时因为只求50以内的, 所以只需要小于等于50就好了for(k = 0; j+k <= 50&&k<=a[i]*i; k += i){ //这里的k <= a[i]*i, 意思是表示a[i]个价值为i的字母的组成的最大价值c2[j+k] += c1[j];}}for(j = 0; j <= 50; j ++){c1[j] = c2[j];c2[j] = 0;}}int ans= 0;for(i = 1; i <= 50; i ++){ans+= c1[i];}printf("%d\n", ans);}return 0;} 
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2082
 

0 0
原创粉丝点击