DP----解码,输出多少种译码结果
有一种将字母编码成数字的方式:'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----解码,输出多少种译码结果相关推荐
- 【FFmpeg杂记】音频解码输出PCM格式数据分析
FFmpeg音频解码后输出的为PCM数据,PCM中的声音数据没有被压缩. FFmpeg中音视频数据基本上都有Packed和Planar两种存储方式,对于双声道音频来说,Packed方式为两个声 ...
- /* * 编程题第四题(20分): 用1元5角钱人名币兑换5分、2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案。 */
题目: /* 编程题第四题(20分): 用1元5角钱人名币兑换5分.2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案. */ 我使用java做的 public class ...
- c语言19之用1元5角钱人名币兑换5分、2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案
题目: 用1元5角钱人名币兑换5分.2分和1分的硬币(每一种都要有)共一百枚, 问共有几种兑换方案?并输出每种方案. 源代码: #include<stdio.h> int main() { ...
- 用1元5角钱人名币兑换5分、2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案。
用1元5角钱人名币兑换5分.2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案. #include<stdio.h> int main(){int sum=150 ...
- 单片机课设基于51单片机的波形发生器(公开资源)(四种波形)(同时输出两种波形)
单片机课设-波形发生器 前言 一.课设任务是什么? 二.如何解决这几个任务? 三.仿真原理图 四.代码 4.1 LCD1602代码 4.2 波形输出以及8*8点阵显示代码 4.3 波形选择 五.仿真源 ...
- 用51单片机做信号发生器,同时输出四种频率的方波
//编写51单片机程序,输出方波. //要求:晶振为12MHz,用T0做定时器,在P1的低四位输出四种频率的方波: // P1.3 = 1.25kHz.P1.2 = 2.5kHz.P1.1 = ...
- 光伏储能并网发电模型,根据储能电池SOC的工作区间,光伏有MPPT、恒功率输出两种控制方式,在电池健康工况下光伏处于MPPT模式
光伏储能并网发电模型,根据储能电池SOC的工作区间,光伏有MPPT.恒功率输出两种控制方式,在电池健康工况下光伏处于MPPT模式,在电池处于极限工况下,光伏处于恒功率模式,通过boost连接到公共点, ...
- 口袋中有红、黄、蓝、白、黑5种颜色的球若干个,每次从口袋中先后取出3个球,问得到3种不同颜色的球的可能取法,输出每种排列的情况。
口袋中有红.黄.蓝.白.黑5种颜色的球若干个,每次从口袋中先后取出3个球,问得到3种不同颜色的球的可能取法,输出每种排列的情况. 方法:(枚举) #include<stdio.h>int ...
- 【C】例9.12口袋中有红、黄、蓝、白、黑5种颜色的球若干。每次从口袋中先后取出3个球, 问得到3种不同颜色的球的可能取法,输出每种排列的情况
//口袋中有红.黄.蓝.白.黑5种颜色的球若干.每次从口袋中先后取出3个球, //问得到3种不同颜色的球的可能取法,输出每种排列的情况 #include <stdio.h> int mai ...
最新文章
- Flask中的重定向redirect和url_for
- Silverlight 参考:KeyEventArgs.Handled 属性
- metamask中的import account的代码实现
- 为什么不能用python_为什么我不能用python加入这个线程?
- Linux系统性能查询命令
- PHP中mysql如何添加记录_PHP向MySql提交数据添加记录的简单代码_PHP教程
- nvidia-smi‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
- ionic build android release,ionic build android -release运行报错
- 内存的工作原理及时序介绍
- 人证合一验证目前逐渐普及大众
- 教你用Axure绘制三级菜单
- 三乘三魔方教程,按步骤来肯定能搞出来
- CAD图纸被设置成只读格式,如何取消?
- python电路仿真软件_Arduino仿真软件64位Virtual Breadboard下载 v4.21
- 独到科技CEO:十年扎根社交数据,用AI技术帮助企业更好服务消费者
- cmd批处理文件格式
- 5-3 jmu-java-m05-使用Comparator接口排序 (10分)
- 微服务等于 Spring Cloud?了解微服务架构和框架
- 图案设计灵感怎么写_妆容设计灵感怎么写
- mysql 表名 下划线_我们可以在MySQL表名中加下划线吗?
热门文章
- Java性能调优、LinkedIn容器部署、阿里移动性能调优——首届APMCon精彩演讲先睹为快...
- nsqjs客户端的部署
- [CareerCup] 8.5 Online Book Reader System 在线读书系统
- Tomcat架构(二)
- 车联网技术对中老年人吸引力更大
- Extmail + Postfix on Debian5
- 巧用360加快您的开机速度
- leetcode005 longest_palidrome
- centos 找不到php.ini,centos找不到php.ini文件
- c# 通过字体对话框获取字体名称和字体大小_【插件】PS、AI、ID都能用的字体管理插件...