动态规划之字符编码

来源:互联网 发布:有道云mac 隐藏侧边栏 编辑:程序博客网 时间:2024/06/06 02:21
/*动态规划---------字符编码(详解参考极客学院课程) 题目描述:一个只包含字母的消息被加密后变成只含有数字的字符串。加密的方式为:         'A'------------'1' 'B'------------'2' .......... 'Z'------------'26'现在给你一列数字字符串,问有多少中被解密的方法?解题思路:经典的dp问题,现假设dp[i]表示解密到第i数字字符的方法数,则dp[i+1]的大小至少和dp[i]相等;若第i+1个数字字符能和第i个字符构成'1'~'26'的其中之一,则第i+1个数字字符的方法数为:dp[i+1]+=dp[i-1]. */#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;//定义dp函数---------字符编码 int Solve(char s[],int len){int i,dp[1010];memset(dp,0,sizeof(dp));if(len<2) return 1;else{dp[0]=dp[1]=1;if(s[0]=='1'||(s[0]=='2'&&s[1]<='6')) dp[1]=2;for(i=2;i<len;i++){dp[i]=dp[i-1];if(s[i-1]=='1'||(s[i-1]=='2'&&s[i]<='6')){dp[i]+=dp[i-2];}}}return dp[len-1];}int main(){char s[1010];int len;printf("请输入一列数字字符串!\n");scanf("%s",s);len=strlen(s);int result=Solve(s,len);printf("结果为:%d\n",result);return 0;} 

0 0
原创粉丝点击