Alphacode

题目描述

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 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

输出要求

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.

假如输入

25114
1111111111
3333333333
0

应当输出

6
89
1

题目大意很简单,用1-26来代表A-Z,比如‘BEAN’代表25114,但25114并不一定是‘BEAN’,你的目的就是为了求出这个数字串可以代表多少个字母串。一开始用的dfs,同时我也注意到了有10,和20要处理,但会超时,之后想了想可以用dp,就和走楼梯差不多,是一步走两阶还是一步走一阶,是不是很像啊。

#include<iostream>
#include<algorithm>
#include <vector>
#include<string.h>
#include<string>
#include<ctype.h>
#include<math.h>
#include <map>
using namespace std;
void solve();
int main()
{
	solve();
	return 0;
}
void solve()
{
	char str[10000];
	int ans[10000],i;
	while(gets(str)&&str[0]!='0')
	{
		ans[0]=ans[1]=1;
		for(i=1;i<strlen(str);i++)
		{
			if(str[i]!='0'&&str[i-1]=='1'||str[i]>='1'&&str[i]<='6'&&str[i-1]=='2')
				ans[i+1]=ans[i]+ans[i-1];
			else if(str[i]=='0')
				ans[i+1]=ans[i-1];
			else
				ans[i+1]=ans[i];
		}
		cout<<ans[strlen(str)]<<endl;
	}
}

时间: 2024-11-11 01:09:01

Alphacode的相关文章

Sicily 1001. Alphacode

1001. Alphacode Constraints Time Limit: 1 secs, Memory Limit: 32 MB 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

poj 2033 Alphacode (dp)

Alphacode Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 13378   Accepted: 4026 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

【HDOJ】1508 Alphacode

简单DP.考虑10.20(出现0只能唯一组合).01(不成立). 1 /* 1508 */ 2 #include <iostream> 3 #include <string> 4 #include <map> 5 #include <queue> 6 #include <set> 7 #include <stack> 8 #include <vector> 9 #include <deque> 10 #incl

SPOJ Problem 394:Alphacode

给一组数字,按a..z为1..26排求出能组成多少种不同的字母链. 简单的DP,边界条件f[0]=1,f[1]=1,f[n]=f[n-1](如果第n个字符即s[n-1]!=48),f[n]+=f[n-2](如果第n和第n-1个字符能组成小于26的数字) #include<cstdio> #include<cstring> char s[5005]; int i,j,l; long long f[5005]; int main(){ while(scanf("%s"

poj 动态规划题目列表及总结

此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276,1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740(博弈),1742, 1887, 1926(马尔科夫矩阵,求平衡), 1936, 1952, 1953, 1958, 1959, 1962, 1975,

Soj题目分类

-----------------------------最优化问题------------------------------------- ----------------------常规动态规划  SOJ1162 I-Keyboard  SOJ1685 Chopsticks SOJ1679 Gangsters SOJ2096 Maximum Submatrix  SOJ2111 littleken bg SOJ2142 Cow Exhibition  SOJ2505 The County

待刷题目分类

各大OJ题目归类 Posted on 2012 年 8 月 8 日 by admin ---------–最优化问题------------- --------动态规划 SOJ1162 I-Keyboard SOJ2096 Maximum Submatrix SOJ2111 littleken bg SOJ2505 The County Fair SOJ2818 QQ音速 SOJ2469 Exploring Pyramids SOJ1833 Base Numbers SOJ2009 Zeros

DP题目列表/弟屁专题

声明: 1.这份列表不是我原创的,放到这里便于自己浏览和查找题目. ※最近更新:Poj斜率优化题目 1180,2018,3709 列表一:经典题目题号:容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740, 1742, 1887, 1926, 1936, 195

编程题目分类(剪辑)

1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代数 13. 组合问题 14. 数论 15. 网格,几何,计算几何 [编程入门] PC 110101, uva 100, The 3n+1 problem, 难度 1 PC 110102, uva 10189, Minesweeper, 难度 1 PC 110103, uva 10137, The T