有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。

现在给一串数字,给出有多少种可能的译码结果。

输入例子2:

31717126241541717

输出例子2:

192

例子说明2:

192种可能的译码结果

一开始没用map存重复数据,70%,TLE

但是这个版本WA,80%

#include <bits/stdc++.h>
using namespace std;
map<string,long long> ma;
long long recursive(string s,int len)
{if(len==0) return 1;if(len==1 && s[0]!='0') return 1;if(len==1 && s[0]=='0') return 0;if(ma.find(s)!=ma.end()) return ma[s];if(len>1 && (s[0]=='1' || (s[0]=='2'&&s[1]<=54)) )//6的ascii=54{return ma[s] = recursive(s.substr(1),len-1)+recursive(s.substr(2),len-2);}else  return ma[s] = recursive(s.substr(1),len-1);
}
int main(){int n,k;long long ans;string numStr;cin>>numStr;int Slen =numStr.length();if(Slen==0) ans=0;else{ans = numStr[0]=='0'?0: recursive(numStr,Slen);}cout<<ans;return 0;
}

少考虑了一种情况(isvalid1),把判定加上并且改成dp的形式,避免递归

#include <iostream>
#include <string>using namespace std;bool isValid2(string nums, int i);
bool isValid1(string nums, int i);int main() {string nums;cin >> nums;if (nums.size() == 0 || nums[0] == '0') {cout << 0 << endl;return 0;}int dp[nums.size() + 1];for (int i = 0; i <= nums.size(); i++) dp[i] = 0;dp[0] = 1;dp[1] = 1;for (int i = 2; i <= nums.size(); i++) {if (isValid2(nums, i)) dp[i] += dp[i - 2];if (isValid1(nums, i)) dp[i] += dp[i - 1];}cout << dp[nums.size()] << endl;return 0;
}bool isValid2(string nums, int i) {if (nums[i - 2] == '0') return false;if (nums[i - 2] == '1') return true;else if (nums[i - 2] == '2') {int num = nums[i - 1] -'0';return (num >= 0) && (num <= 6);}return false;
}bool isValid1(string nums, int i) {return !(nums[i - 1] == '0');
}

DP----解码,输出多少种译码结果相关推荐

  1. 【FFmpeg杂记】音频解码输出PCM格式数据分析

      FFmpeg音频解码后输出的为PCM数据,PCM中的声音数据没有被压缩.   FFmpeg中音视频数据基本上都有Packed和Planar两种存储方式,对于双声道音频来说,Packed方式为两个声 ...

  2. /* * 编程题第四题(20分): 用1元5角钱人名币兑换5分、2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案。 */

    题目: /* 编程题第四题(20分): 用1元5角钱人名币兑换5分.2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案. */ 我使用java做的 public class ...

  3. c语言19之用1元5角钱人名币兑换5分、2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案

    题目: 用1元5角钱人名币兑换5分.2分和1分的硬币(每一种都要有)共一百枚, 问共有几种兑换方案?并输出每种方案. 源代码: #include<stdio.h> int main() { ...

  4. 用1元5角钱人名币兑换5分、2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案。

    用1元5角钱人名币兑换5分.2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案. #include<stdio.h> int main(){int sum=150 ...

  5. 单片机课设基于51单片机的波形发生器(公开资源)(四种波形)(同时输出两种波形)

    单片机课设-波形发生器 前言 一.课设任务是什么? 二.如何解决这几个任务? 三.仿真原理图 四.代码 4.1 LCD1602代码 4.2 波形输出以及8*8点阵显示代码 4.3 波形选择 五.仿真源 ...

  6. 用51单片机做信号发生器,同时输出四种频率的方波

    //编写51单片机程序,输出方波. //要求:晶振为12MHz,用T0做定时器,在P1的低四位输出四种频率的方波: //    P1.3 = 1.25kHz.P1.2 = 2.5kHz.P1.1 = ...

  7. 光伏储能并网发电模型,根据储能电池SOC的工作区间,光伏有MPPT、恒功率输出两种控制方式,在电池健康工况下光伏处于MPPT模式

    光伏储能并网发电模型,根据储能电池SOC的工作区间,光伏有MPPT.恒功率输出两种控制方式,在电池健康工况下光伏处于MPPT模式,在电池处于极限工况下,光伏处于恒功率模式,通过boost连接到公共点, ...

  8. 口袋中有红、黄、蓝、白、黑5种颜色的球若干个,每次从口袋中先后取出3个球,问得到3种不同颜色的球的可能取法,输出每种排列的情况。

    口袋中有红.黄.蓝.白.黑5种颜色的球若干个,每次从口袋中先后取出3个球,问得到3种不同颜色的球的可能取法,输出每种排列的情况. 方法:(枚举) #include<stdio.h>int ...

  9. 【C】例9.12口袋中有红、黄、蓝、白、黑5种颜色的球若干。每次从口袋中先后取出3个球, 问得到3种不同颜色的球的可能取法,输出每种排列的情况

    //口袋中有红.黄.蓝.白.黑5种颜色的球若干.每次从口袋中先后取出3个球, //问得到3种不同颜色的球的可能取法,输出每种排列的情况 #include <stdio.h> int mai ...

最新文章

  1. Flask中的重定向redirect和url_for
  2. Silverlight 参考:KeyEventArgs.Handled 属性
  3. metamask中的import account的代码实现
  4. 为什么不能用python_为什么我不能用python加入这个线程?
  5. Linux系统性能查询命令
  6. PHP中mysql如何添加记录_PHP向MySql提交数据添加记录的简单代码_PHP教程
  7. nvidia-smi‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
  8. ionic build android release,ionic build android -release运行报错
  9. 内存的工作原理及时序介绍
  10. 人证合一验证目前逐渐普及大众
  11. 教你用Axure绘制三级菜单
  12. 三乘三魔方教程,按步骤来肯定能搞出来
  13. CAD图纸被设置成只读格式,如何取消?
  14. python电路仿真软件_Arduino仿真软件64位Virtual Breadboard下载 v4.21
  15. 独到科技CEO:十年扎根社交数据,用AI技术帮助企业更好服务消费者
  16. cmd批处理文件格式
  17. 5-3 jmu-java-m05-使用Comparator接口排序 (10分)
  18. 微服务等于 Spring Cloud?了解微服务架构和框架
  19. 图案设计灵感怎么写_妆容设计灵感怎么写
  20. mysql 表名 下划线_我们可以在MySQL表名中加下划线吗?

热门文章

  1. Java性能调优、LinkedIn容器部署、阿里移动性能调优——首届APMCon精彩演讲先睹为快...
  2. nsqjs客户端的部署
  3. [CareerCup] 8.5 Online Book Reader System 在线读书系统
  4. Tomcat架构(二)
  5. 车联网技术对中老年人吸引力更大
  6. Extmail + Postfix on Debian5
  7. 巧用360加快您的开机速度
  8. leetcode005 longest_palidrome
  9. centos 找不到php.ini,centos找不到php.ini文件
  10. c# 通过字体对话框获取字体名称和字体大小_【插件】PS、AI、ID都能用的字体管理插件...