首页 > 其他 > 详细

HDU 1523 Decoding Morse Sequences

时间:2014-08-01 19:25:42      阅读:467      评论:0      收藏:0      [点我收藏+]

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1523

此题大意为 给你一串摩尔斯密码  再给你一个字典(下面单词本)

用下面的单词组合成给你的摩尔斯密码, 问最多有多少种不同的组合方式。

题解分析:

1.设字符串的长度为len ,  判断dp[i]处是否可达, 若可达则遍历整个单词表。

2.要先把dp[0]设为1,遍历单词表,若此单词可以在 i 处匹配则 dp[i+L] += dp[i], L(这个单词转成摩尔斯密码后的字符长度);

3.最后输出dp[len];

下面是代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 char Morse[26][5]={{".-"},{"-..."},{"-.-."},{"-.."},
 5 {"."},{"..-."},{"--."},{"...."},{".."},{".---"},{"-.-"},{".-.."},
 6 {"--"},{"-."},{"---"},{".--."},{"--.-"},{".-."},{"..."},{"-"},
 7 {"..-"},{"...-"},{".--"},{"-..-"},{"-.--"},{"--.."}};
 8 
 9 char Dict[10005][205];//字典保存每个单词
10 int dp[40005];
11 int main()
12 {
13     int T, i, n, len, j, a;
14     char str[10270], str2[270];
15     scanf("%d",&T);
16     while(T--)
17     {
18         scanf("%s",str);
19         len = strlen(str);
20         scanf("%d",&n);
21         memset(dp,0,sizeof(dp));
22         for(i=0; i<n; i++)//转化词典
23         {
24             Dict[i][0]=NULL;//每次到要初始化
25 
26             scanf("%s",str2);
27             for(j=0; str2[j]; j++)
28                 strcat(Dict[i],Morse[str2[j]-A]);
29         }
30         dp[0] = 1;
31         for(i=0; i<len; i++)
32         {
33             if(dp[i])
34             {
35                 for(j=0; j<n; j++)
36                 {
37                     a = strlen(Dict[j]);
38 
39                     if(strncmp(str+i,Dict[j],a) == 0)//若此处可以匹配
40                         dp[i+a] += dp[i];
41                 }
42             }
43         }
44         printf("%d\n",dp[len]);
45     }
46     return 0;
47 }

 

HDU 1523 Decoding Morse Sequences,布布扣,bubuko.com

HDU 1523 Decoding Morse Sequences

原文:http://www.cnblogs.com/chenchengxun/p/3885537.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!