您的位置:首页 > 其它

Sicily.1001. Alphacode

2012-12-26 11:45 555 查看
//1001. Alphacode
//
//
//题目大意:
//将一串字符串(只有A-Z)转化成数字0-9,转换的规则:A->1,B->2 ......Z->26。
//那么从这段数字再转换回去字符串就会发生一些歧义,题目要求求出一段数字转换成字符串的最多数量。
//
//解题思路:
//如果说用dp[i]表示当前的前i个数字能够转化的字符串数量,当str[i+1]加进来时,如果说跟前面的一个字符能够构成26以下的数字,那说明这个状态至少有两种组合选择:
//跟第i个数字一起翻译,那么前i-1个就是一个子状态了;
//单独翻译,那前i个作为一个整体;
//于是状态的转移就是:dp[i] = dp[i-1] + dp[i-2]
//当然,这里需要考虑0的状况,因为0是不能作为十位数并且不能单独翻译的,所以有了另外的两个状态转移。
#include <iostream>
#include <stdlib.h>
#include <string>
#include <memory.h>
using namespace std;
#define MAX 10000

int main()
{

int dp[MAX];
string a;
while(cin >> a && a !="0")
{
memset(dp,0, sizeof(dp));
dp[0] = 1;
dp[1] = 1;
for(int i=2; i<=a.length(); i++){
int a1 = a[i-1] - '0';
int a2 = a[i-2] - '0';
if(a1 != 0 && a2 != 0 && (a2*10 + a1) <= 26){
dp[i] = dp[i-1] + dp[i-2];
}
else {
if(a1 == 0)
dp[i] = dp[i-2];
else
dp[i] = dp[i-1];
}
}
cout << dp[a.length()] << endl;
}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: