题目简单描述: 给定一个长数串,输出可能的字母串解个数。(A对应1,Z对应26)

样例输入:25114

样例输出:6

样例解释:可能的字母串解:YJD、YAAD、YAN、BEJD、BEAAD、BEAN

样例输入:33333333

样例输出:1

样例解释:可能的字母串解:CCCCCCCC

Solution1:(递归,结果TLE)

  第一眼看题想到的方法就是递归,逐个字符向后推,直到初态方程。

  设串长度为len,当前处理字符为chr1,下一字符为chr2,前一字符为ch0,则递归方程为:

  if  chr1>'2':

    solution(len)=solution(len-1)

  if  chr1='2':

    if  chr2<'7':

      solution(len)=solution(len-1)+solution(len-2)

    else:

      solution(len)=solution(len-2)

  if chr1!='0':

    solution(len)=solution(len-1)+solution(len-2)  

  if chr1='0':  

    if ch0>'2':

      solution(len)=0

    soltion(len)=solution(len-1)

  边界值:solution(0)=1,solution(1)=1

  结果:本机测试全过,提交结果TLE

Solution2:(动态规划)

  递归时间爆表,考虑从算法优化。分析数字串解码特典,发现具有典型的无后效性与状态性,从而考虑动态规划。

  分析状态转移过程,从末尾数字向前推,假设倒数第i个数字状态下字母可能性为s[i],倒数第i-1个数字状态下字母可能性为s[i-1],倒数第i个数字是str0,倒数第i+1个数字是str1

  则状态转移方程:

    s[i+1]=s[i]+s[i-1]  (str0与str1能形成合法字母)

        =s[i]     (str0与str1不能形成合法字母)

Solution3:(分治)

  注:这是从网上看到的,思维很独特,转之

  首先考虑全由1、2组成的串,则结果只与长度n有关,为斐波那契第n项(这一点很好证明)。然后考虑0与3~9,每发现其中一个数字就作为一个间断,将长数列分成两个子数列,对子数列进行解得求值,然后根据乘法原理得到最后结果

    

soj1001算法分析的更多相关文章

  1. Fibonacci 数列算法分析

    /************************************************* * Fibonacci 数列算法分析 ****************************** ...

  2. 数据结构与算法分析——C语言描述 第三章的单链表

    数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...

  3. 第四章 Leader选举算法分析

    Leader选举 学习leader选举算法,主要是从选举概述,算法分析与源码分析(后续章节写)三个方面进行. Leader选举概述 服务器启动时期的Leader选举 选举的隐式条件便是ZooKeepe ...

  4. Python数据结构与算法--算法分析

    在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...

  5. 算法分析 Analysis of Algorithms -------GeekforGeeker 翻译

    算法分析 Analysis of Algorithms 为什么要做性能分析?Why performance analysis? 在计算机领域有很多重要的因素我们要考虑 比如用户友好度,模块化, 安全性 ...

  6. 阶乘之和 &amp; 程序运行时间 &amp; 算法分析

    实例:输入n,计算S = 1! + 2! + 3! + 4! + ... + n!的末六位(不含前导0).其中 n ≤ 106. 分析:考虑到数据溢出后程序如下: #include <stdio ...

  7. XoftSpy 4.13的注册算法分析

    [标题]XoftSpy 4.13的注册算法分析 [作者]forever[RCT] [语言]VC [工具]ida4.6,ollydbg1.1 [正文]       这个软件的算法很简单,正好拿来做逆向分 ...

  8. 数据结果与算法分析(1)&mdash;&mdash;算法分析

          在确定一个算法正确的同时,也要保证算法的有效性.算法分析的最重要的标准时运行时间T(N),运行时间与输入元素个数N有关. 数学基础         T(N) = O(f(N)) 表示T(N ...

  9. RapidMiner的基本使用(一个医疗数据的简单决策树算法分析)

    RapidMiner的基本使用(一个医疗数据的简单决策树算法分析) RapidMiner的基本使用(一个医疗数据的简单决策树算法分析) 需要分析的文件: 右键分别创建读取excel数据,选择属性,设置 ...

随机推荐

  1. IOS 整体架构 和 MVC布局

    IOS的生态系统 IOS生态系统不仅仅是指产品,更重要的是指 iPhone/iPad/iPod/Mac +iCloud+App整个系统,包括Siri (部分设备不支持).FaceTime.Safari ...

  2. Javascript常用对象的属性和方法

    javascript为我们提供了一些非常有用的常用内部对象和方法.用户不需要用脚本来实现这些功能.这正是基于对象编程的真正目的. 在javascript提供了string(字符串).math(数值计算 ...

  3. archlinux vmware一些问题

    虚拟机没法上网 sudo modprobe vmnet sudo vmware-network --start

  4. oracle asm 概念

    automated storage management ,即自动存储管理,简称asm .. 在oracle 10g 这个版本之前,管理一个大型数据库成千上万的数据文件对数据库管理员来说是一个既无技术 ...

  5. abort终止正在进行中的的ajax请求

    核心:调用XMLHttpRequest对象上的abort方法 jQuery的ajax方法有自己的超时时间设置参数:   $.ajax({type:'POST', url:'b.php', data:' ...

  6. 记在centos中连接无线网络的一次过程

    1. 首先, 你的系统要能驱动无限网卡, 要是人品好的话, 系统已经自带了你的网卡的驱动程序. 不然就要先搞定无线网卡的驱动再说. 不然后面的步骤也就没必要了. 2. 看一下你的无线网卡叫什么: iw ...

  7. MyBatis学习系列一之环境搭建

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 学习一个新的知识,首先做一个简单的例子使用一下,然后再逐步深入.MyBat ...

  8. Sqli-labs less 42

    Less-42 Update更新数据后,经过mysql_real_escape_string()处理后的数据,存入到数据库当中后不会发生变化.在select调用的时候才能发挥作用.所以不用考虑在更新密 ...

  9. (转载)Java里快如闪电的线程间通讯

    转自(http://www.infoq.com/cn/articles/High-Performance-Java-Inter-Thread-Communications) 这个故事源自一个很简单的想 ...

  10. spring框架七大模块

    1. Spring Core: Core封装包是框架的最基础部分,提供IOC和依赖注入特性.这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并 ...