题目大意是给出一个序列,问有多少种解码方法。这种问题可以从子问题的解得到问题的解,是典型dp的标志。
#include<stdio.h>
#include<string.h>
char st[5005];
int arr[5005];
int main()
{
int i, len;
while (scanf("%s",st) != EOF && st[0] != '0')
{
len = strlen(st);
for (i = 0; i < len; ++ i) arr[i] = 0;
arr[0] = arr[1] = 1;
for (i = 1; i < len; ++ i) //DP
{
if (st[i] == '0') arr[i+1] = arr[i-1]; //判断类似于1101的特殊情况
else if (st[i-1] < '2' && st[i-1] > '0') arr[i+1] = arr[i] + arr[i-1];
else if (st[i-1] == '2' && st[i] <= '6') arr[i+1] = arr[i] + arr[i-1];
else arr[i+1] = arr[i];
}
printf("%d\n",arr[len]);
}
return 0;
}
本文介绍了一种使用动态规划解决特定字符串解码方法计数问题的方法。通过分析输入字符串,利用递推公式计算出所有可能的解码方式数量。文章提供了完整的C语言实现代码。
324

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



