题目链接

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`

题目分析:

默认从A到Z这26个英文字母的权重为1到26,依次输入26个数字,分别代表从A到Z这26个字母的个数。从这些子母中找出一些组成单词,一个单词的权重为其中每个单词的权重之和,但是组成的单词与排列顺序无关,要求组成单词的权重不大于50.

这就是一个普通的母函数的应用,关于母函数的知识可以具体见上一篇博客。

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<vector>
using namespace std;
int c1[100],c2[100];
int main()
{
vector<int> num;
vector<int> qz;
int T;
scanf("%d",&T);
while(T--)
{
num.clear();
qz.clear();
memset(c1,0,sizeof(c1));
memset(c2,0,sizeof(c2));
int temp;
for(int i=1; i<=26; i++)
{
scanf("%d",&temp);
if(temp!=0)
{
num.push_back(temp);///当前的个数不为0时,就把当前这个字母对应的权重和个数分别存下
qz.push_back(i);
}
}
int n=num.size();
if(n==0) ///当前所有的字母个数都为0的话,就没有计算的必要了,直接输出0
printf("0\n");
else
{
for(int i=0; i<=50&&i<=num[0]*qz[0]; i+=qz[0])/*第一个字母,关键在于i的控制,i表示的是权重的累加和
不仅要小于要求50,还得小于当前字母个数的总权重
*/
c1[i]=1;
for(int i=1; i<n; i++) ///从第二个字母开始循环
{
for(int j=0; j<=50; j++) ///表示当前已经拥有的权重
{
for(int k=0; k<=50&&k<=num[i]*qz[i]; k+=qz[i])///在该字母上可以取得的权重,满足条件和第一个字母一样
c2[k+j]+=c1[j]; ///该权重下的个数刷新
}
for(int p=0; p<=50; p++)///每一个字母找玩后都要保存并c2初始化
{
c1[p]=c2[p];
c2[p]=0;
}
}
int sum1=0;
for(int i=1; i<=50; i++)
sum1+=c1[i];
printf("%d\n",sum1);
}
}
}

HDU 2082 找单词 (普通母函数)的更多相关文章

  1. HDU 2082 找单词 (普通型 数量有限 母函数)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2082 找单词 Time Limit: 1000/1000 MS (Java/Others)    Me ...

  2. HDU 1028 整数拆分 HDU 2082 找单词 母函数

    生成函数(母函数) 母函数又称生成函数.定义是给出序列:a0,a1,a2,...ak,...an, 那么函数G(x)=a0+a1*x+a2*x2+....+ak*xk +...+an* xn  称为序 ...

  3. HDU——2083找单词(母函数)

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

  4. HDU 2082 找单词 (多重背包)

    题意:假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找到多少价值<=50的 ...

  5. HDU 2082 找单词

    Problem Description 假 设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字 ...

  6. HDU 2082 找单词 --生成函数

    跟上题是一个思路:http://www.cnblogs.com/whatbeg/p/3728545.html 只不过是上一题的扩展. 代码: #include <iostream> #in ...

  7. hdu acm 2082 找单词

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

  8. HDOJ 2082 找单词 (母函数)

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

  9. HDU2082 找单词 【母函数】

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

随机推荐

  1. IBM存储降级告警等一些服务器问题/dd/ethtool

    1.IBM存储降级告警 一般两种情况 a.端口降级 例如模块16G->8G(IBM储存端口自适应) b.系统在作raid后,有硬盘损坏,降级 黄灯告警 2. dimm error dimm内存插 ...

  2. 各种GIT代码托管工具比较

    bitbucket免费支持5个开发成员的团队创建无限私有代码托管库. GOES是一个由GO语音编写的自组GIT托管服务. gitorious 是一个基于GIT版本控制系统的WEB项目托管平台,基于RU ...

  3. centOS 中安装 Redis

    之前安装过了 jdk,mysql,tomcat,这次安装 Redis,最开始是将 redis 安装在 windows 下 run 的,这时安装在 Linux 里面试试. 1 . 首先得安装 c环境,用 ...

  4. rxjs5.X系列 —— ErrorHandling/Condition/Mathematical系列 api 笔记

    欢迎指导与讨论 : ) 前言 本文是笔者翻译 RxJS 5.X 官网各类operation操作系列的的第四篇 —— ErrorHanding异常处理.Condition Operator情况操作.Ma ...

  5. shell脚本如何获取当前时间

    在shell脚本里常常需要获取系统时间来处理某项操作,linux的系统时间在shell里是可以直接调用系统变量的如: 获取今天时期:`date +%Y%m%d` 或 `date +%F` 或 $(da ...

  6. Idea报错Command line is too long

    需要在该项目文件夹下.idea/workspace.xml中添加 <component name="PropertiesComponent"> ... <prop ...

  7. InnoDB 5.6 新特性之一:FullTEXT Indexes[1.简单介绍]

    先来看一条SQL语句: SELECT * FROM aa where acol like '%like_normal%'; 当我们使用Innodb时,无论如何对这条语句进行优化,都是无意义的:有的人会 ...

  8. 秒杀多线程第十四篇 读者写者问题继 读写锁SRWLock (续)

    java 包实现了读写锁的操作: package com.multithread.readwritelock; import java.util.concurrent.CountDownLatch; ...

  9. grub引导启动 win10 Ubantu 凤凰OS 三系统

    在Ubantu OS下,用文件管理器打开系统磁盘下的 boot文件夹,然后用管理员身份打开grub文件夹,然后打开grub.cfg(用记事本打开) 4. 在grub.cfg文件里面找到下一段内容(比较 ...

  10. [HNOI/AHOI2018]排列 贪心

    题面 题解: 把题面的限制换成中文: 如果排在第k位的下标 = 排在第j位的值 ,那么k < j 换一个描述方式: 一个值为x的数要排在第x个数后面. 再换一个描述方式: \(fa[i] = a ...