博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sicily 1001. Alphacode
阅读量:5886 次
发布时间:2019-06-19

本文共 1487 字,大约阅读时间需要 4 分钟。

【题意】

给一串数,这一串数可以解码为若干英文字母的组合,比如‘1’对应‘A’,‘26’对应‘Z’,输入保证是合法的,不会出现说有解码不了的情况,求这一串数可以解释为多少种英文字母的组合。

【思路】

动态规划思想,如果当前字符为‘0’,则dp[i]=dp[i-2],如果当前字符不为‘0’,且与前面的数字组合能构成英文字母,那么dp[i]=dp[i-1]+dp[i-2]。这两种情况中,i=1的时候另外处理。本来不难的题目,因为和前一个字母进行判断的时候条件写错了,纠结了很久……

 

1 #include
2 #include
3 #include
4 using namespace std; 5 int main() 6 { 7 string s; 8 while(cin>>s && s!="0") 9 {10 int l = s.length();11 long dp[l];12 memset(dp,0,sizeof(dp)); 13 dp[0] = 1;14 for(int i = 1; i < l; i++)15 {16 if(s[i] == '0')17 {18 if(i ==1)19 dp[i] = dp[i-1];20 else21 dp[i] = dp[i-2];22 }23 else24 {25 26 if((s[i-1] == '1' && s[i] <= '9') || (s[i-1] == '2' && s[i]<='6'))27 {28 if(i != 1)29 dp[i] = dp[i-1] + dp[i-2];30 else31 dp[i] = dp[i-1] + 1;32 }33 else34 dp[i] = dp[i-1];35 }36 37 }38 cout<
<

转载于:https://www.cnblogs.com/mrlaker/archive/2012/07/17/2595271.html

你可能感兴趣的文章
跟我学交换机配置(六)
查看>>
原创:检查点的三种加入方式
查看>>
图形界面备份Linux系统介绍
查看>>
SQLServer性能优化之查询提示
查看>>
企业建立规范化IT运维管理制度的重要性
查看>>
CCNA(Stand-ALONE)Lab 14-Troubleshooting RIP
查看>>
oc51--循环retain
查看>>
Java基本数据类型与位运算
查看>>
欣赏ActionScript 3 的元件架构
查看>>
详细解说IIS运用程序池以及运用程序池回收【转】
查看>>
C#-gdi绘图,双缓冲绘图,Paint事件的触发
查看>>
Objective-C的泛型
查看>>
使用SftpDrive+SourceInsight阅读开源代码
查看>>
【温故而知新-Javascript】使用数组
查看>>
向Oracle中插入记录时,出现“Oracle.DataAccess.Client.OracleException ORA-00933 ”错误
查看>>
生成对抗网络入门指南(内含资源和代码)
查看>>
基于梯度下降的神经网络
查看>>
调试相关连接资源
查看>>
AUCAD自定义[2006.9.22]
查看>>
使用docker搭建渗透测试环境
查看>>