`
rapheal
  • 浏览: 171226 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

【动态规划】sicily1001

阅读更多

1001. Alphacode

 

题目大意:

将一串字符串(只有A-Z)转化成数字0-9,转换的规则:A->1,B->2 ......Z->26。

那么从这段数字再转换回去字符串就会发生一些歧义,题目要求求出一段数字转换成字符串的最多数量。

 

解题思路:

如果说用dp[i]表示当前的前i个数字能够转化的字符串数量,当str[i+1]加进来时,如果说跟前面的一个字符能够构成26以下的数字,那说明这个状态至少有两种组合选择:

  1. 跟第i个数字一起翻译,那么前i-1个就是一个子状态了;
  2. 单独翻译,那前i个作为一个整体;

于是状态的转移就是:dp[i] = dp[i-1] + dp[i-2]

当然,这里需要考虑0的状况,因为0是不能作为十位数并且不能单独翻译的,所以有了另外的两个状态转移。

 

 

源码如下:

 

/*
 * main.cpp
 *
 *  Created on: Sep 23, 2011
 *      Author: raphealguo
 */

#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;

#define MAXL 10000

int dp[MAXL];

int main(){
	int n;
	char str[MAXL];
	int i, len;
	int c1, c2;

	while (scanf ("%s", str) && !(strlen(str) == 1 && str[0] == '0')) {
		memset(dp, 0, sizeof(dp));
		len = strlen(str);

		dp[0] = 1;
		dp[1] = 1;
		for (i = 2; i <= len; ++i){
			c1 = str[i-1] - '0';
			c2 = str[i-2] - '0';
					
			//子状态的3组选择	
			if (c2 != 0 && c1 != 0 && c2*10 + c1 <= 26){
				dp[i] = dp[i-1] + dp[i-2];
			}else if (c1 == 0){//处理个位的0
				dp[i] = dp[i-2];
			}else{//处理十位的0
				dp[i] = dp[i-1];
			}
		}

		printf ("%d\n", dp[len]);

	}

	return 0;
}

 

附带原题:

1001. Alphacode

Description

Alice and Bob need to send secret messages to each other and are discussing ways to encode their messages: Alice: "Let's just use a very simple code: We'll assign `A' the code word 1, `B' will be 2, and so on down to `Z' being assigned 26." Bob: "That's a stupid code, Alice. Suppose I send you the word `BEAN' encoded as 25114. You could decode that in many different ways!" Alice: "Sure you could, but what words would you get? Other than `BEAN', you'd get `BEAAD', `YAAD', `YAN', `YKD' and `BEKD'. I think you would be able to figure out the correct decoding. And why would you send me the word `BEAN' anyway?" Bob: "OK, maybe that's a bad example, but I bet you that if you got a string of length 500 there would be tons of different decodings and with that many you would find at least two different ones that would make sense." Alice: "How many different decodings?" Bob: "Jillions!" For some reason, Alice is still unconvinced by Bob's argument, so she requires a program that will determine how many decodings there can be for a given string using her code.

Input

Input will consist of multiple input sets. Each set will consist of a single line of digits representing a valid encryption (for example, no line will begin with a 0). There will be no spaces between the digits. An input line of `0' will terminate the input and should not be processed

Output

For each input set, output the number of possible decodings for the input string. All answers will be within the range of a long variable.

Sample Input

25114
1111111111
3333333333
0

Sample Output

6
89
1

 

分享到:
评论

相关推荐

    sicily部分题目源代码

    在 sicily 上的题目,通常会涉及到排序、搜索、图论、动态规划、贪心算法、回溯算法等经典算法。每种算法都有其特定的应用场景和优缺点,理解并掌握它们是成为一名优秀程序员的关键。 1. **排序算法**:如快速排序...

    sicily AC代码

    5. **Poor contestant Prob**:题目名称暗示可能是一个概率问题,需要理解概率理论和随机过程,可能涉及到动态规划或蒙特卡洛模拟来求解。 6. **MJ, Nowhere to Hide**:可能是一个搜索或图遍历问题,比如深度优先...

    soj.rar_1876_sicily 1022_sicily 1934_sicily soj IP

    这些题目可能涵盖了不同的难度等级和数据结构应用,如排序、搜索、图论、动态规划等。 标签 "1876 sicily_1022 sicily_1934 sicily_soj_ip" 进一步强调了问题的编号和主题。这里 "IP" 可能指的是 "Interactive ...

    CPP-for-sicily.zip_sicily

    算法方面,排序(如冒泡排序、快速排序、归并排序)和查找(如二分查找、哈希查找)是基础,而动态规划、贪心算法、回溯法等更高级的策略则常常出现在复杂的竞赛题目中。 "C++ for sicily.doc"文档可能涵盖了这些...

    sicily-1274.rar_sicily

    2. **算法和数据结构**:查找并学习使用的算法和数据结构,如排序、搜索、图论、动态规划等。 3. **编程语言特性**:根据源代码的语言,学习和熟悉特定语言的语法和最佳实践。 4. **设计模式**:识别和理解代码中...

    sicily刷题指南

    中大sicily online judge的刷题指南,里面介绍得很详细,不过,最近sicily好像不能外网访问了。

    sicily-code--2.rar_sicily

    3. **算法与数据结构**:参考代码中很可能包含了各种算法实现,如排序、搜索、图论、动态规划等。数据结构如数组、链表、树、图、哈希表等也可能是重点。理解这些算法和数据结构的原理及其应用是提升编程能力的关键...

    sicily 1562.LVM

    sicily 1562_LVM.cpp参考代码

    Sicily_Queue.rar_sicily

    "Sicily_Queue.rar_sicily"这个压缩包文件显然包含了与在Sicily平台上实现高效队列操作相关的代码或文档。 首先,我们需要理解队列的基本概念。队列就像一个等待服务的队伍,新进来的元素(入队)会排在队伍的末尾...

    sicily1006代码

    本cpp是sicily的1006的解题代码 这份代码以最简单的方式实现了它的功能要求 值得学习一番

    sicily1007题

    sicily1007题答案,附代码解释,可以在平台上通过

    sicily1294.rar_1294_sicily

    【标题】"sicily1294.rar_1294_sicily" 提供的信息表明,这可能是一个与中山大学ACM竞赛相关的代码压缩包,其中包含了对问题1294 "Sicily"的解决方案。在ACM(国际大学生程序设计竞赛,International Collegiate ...

    sicily上部分题目代码

    在 sicily 平台上,题目涉及的编程语言可能包括但不限于 Python、Java、C++、JavaScript 等,而解题思路可能涉及到排序算法(如冒泡排序、快速排序)、搜索算法(如二分查找、深度优先搜索)、动态规划、图论、字符...

    sicily题目1093 1888

    对于题目1093和1888,它们的具体内容和要求是未知的,可能涉及到排序、搜索、图论、动态规划、字符串操作等各种算法和问题领域。要完全理解这些代码,我们需要查看题目描述,这通常会提供输入格式、输出要求、示例...

    sicily-code.rar_1137_sicily

    3. **数据结构与算法**:作为学术项目,可能涉及到复杂的数据结构(如链表、树、图)和算法(排序、搜索、动态规划等),这些都是计算机科学的基础。 4. **软件工程**:项目可能遵循软件工程的原则,包括需求分析、...

    sicily-code--3.rar_sicily

    【标题】"sicily-code--3.rar_sicily" 提供的是中山大学sicily课程相关的编程参考资料,这可能是一门涵盖计算机科学与信息技术的课程,其中涉及到的代码可能是用于教学或者项目实践。从描述来看,这个压缩包包含了...

    sicily_source.zip_sicily

    在“sicily_source.zip_sicily”这个压缩包文件中,我们主要关注的是与西西里相关的编程练习,这些练习涵盖了输入输出操作和标准程序设计,同时也涉及到超高精度浮点数的输出问题以及关联数组这一数据结构。...

    sicily-online-judge.zip_sicily

    - "robot.cpp" 文件的名称没有明确指明具体主题,但考虑到 sicily online judge 的背景,这可能是一个关于机器人路径规划或运动控制的编程问题,可能涉及到搜索算法(如深度优先搜索或广度优先搜索)或图论中的移动...

Global site tag (gtag.js) - Google Analytics