Sicily.1001. Alphacode
2012-12-26 11:45
597 查看
//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; }
相关文章推荐
- [sicily online]1001. Alphacode
- Sicily 1001 Alphacode
- sicily-1001 alphacode
- Sicily 1001. Alphacode
- sicily 1001. Alphacode (DP)
- Sicily 1001. Alphacode
- sicily 1001. Alphacode
- [sicily] 1001. Alphacode
- 【艾米莉娅】Sicily:1001. Alphacode 代码分享
- 动态规划实例:"Alphacode" From Sicily 1001
- sicily 1001. Alphacode
- Sicily 1001 Alphacode
- Sicily 1001. Alphacode
- Sicily.1001.Alphacode
- Sicily 1001.Alphacode | 动态规划
- Sicily-1001. Alphacode
- Sicily.1001. Alphacode
- Sicily 1001. Alphacode
- Sicily 1001. Alphacode
- sicily 1001 Alphacode