zoukankan      html  css  js  c++  java
  • HDU 2802 找单词

    找单词

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


    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

    Recommend

    lcy
     1 #include<stdio.h>
    2 #include<string.h>
    3 int val[55] , val_[55] ;
    4 int main ()
    5 {
    6 int cas , cn ;
    7 scanf ( "%d" , &cas ) ;
    8 while ( cas -- )
    9 {
    10 memset( val , 0 , sizeof (val) ) ;
    11 memset( val_ , 0 , sizeof (val_) ) ;
    12 val[0] = 1 ;
    13 for ( int i = 1 ; i <= 26 ; ++ i )
    14 {
    15 scanf ( "%d" , &cn ) ;
    16 if ( cn == 0 )
    17 {
    18 continue ;
    19 }
    20 for ( int j = 0 ; j <= 50 ; ++ j )
    21 {
    22 for ( int k = 0 ; k <= cn && k * i + j <= 50 ; ++ k )
    23 val_[i*k+j] += val[j] ;
    24 }
    25 for ( int j = 0 ; j <= 50 ; j ++ )
    26 {
    27 val[j] = val_[j] ;
    28 val_[j] = 0 ;
    29 }
    30 }
    31 int sum = 0 ;
    32 for ( int i = 1 ; i <= 50 ; i ++ )
    33 sum += val[i] ;
    34 printf ( "%d\n" , sum ) ;
    35 }
    36 return 0 ;
    37 }

      

      

  • 相关阅读:
    MFC对话框控件数据提取之DoDataExchange()
    慎用USES_CONVERSION
    Oracle OCP 11G 051(61题版本)答案解析目录
    OCP-1Z0-新051-61题版本-61
    OCP-1Z0-新051-61题版本-60
    OCP-1Z0-新051-61题版本-59
    OCP-1Z0-新051-61题版本-58
    OCP-1Z0-新051-61题版本-57
    OCP-1Z0-新051-61题版本-55
    OCP-1Z0-新051-61题版本-56
  • 原文地址:https://www.cnblogs.com/jbelial/p/2117591.html
Copyright © 2011-2022 走看看