#include<iostream>
#include<cstring>
#include<fstream>
using namespace std;
static int f[10001];
static char a[10002];
int main()
{
while (cin >> (a + 1))
{
if (a[1] == '0')
break;
int n = strlen(a + 1);
int i;
f[0] = 1; f[1] = 1;
for (i = 2; i <= n; i++)
{
f[i] = 0;
if (a[i] != '0')
f[i] = f[i - 1];
if (a[i - 1] == '1' || (a[i -1] == '2' && a[i] <= '6'))
{ f[i] += f[i - 2]; }
}
cout << f[n] << "\n";
}
return 0;
}
[a, z]===>[1, 26]
典型的动态规划,递推关系比较容易找寻。
f[i] [1, i] 段的数目。
另外就是 ‘0’ 和 0 程序书写时易出错。
本文介绍了一种使用动态规划解决特定字符串解码问题的方法。通过分析递推关系,该算法可以高效地计算出字符串的不同解码方式的数量。特别关注了数字到字母的映射规则,如数字1对应'a'等,并解决了包含'0'的情况。
474

被折叠的 条评论
为什么被折叠?



