标签:母函数
题意: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的种类初始化为1
for(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=2082hdoj 2082 找单词 【母函数】,布布扣,bubuko.com
标签:母函数
原文地址:http://blog.csdn.net/shengweisong/article/details/38533973