题意:
一些没有空格间隔的数,若1对应A,2对应B,...,26对应Z,问有多少种对应的字符串。
很简单的DP。
注意0的处理。
</pre><pre name="code" class="cpp">#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef unsigned long long ULL;
const int maxn = 5005;
int n;
ULL dp[maxn];
char s[maxn];
int main() {
while(1) {
scanf("%s", s + 1); n = strlen(s + 1);
if(n == 1 && s[1] == '0') break;
dp[0] = 1;
for(int i = 1; i <= n; i++) {
dp[i] = 0;
if(s[i] != '0') dp[i] += dp[i - 1];
if(i > 1 && s[i - 1] == '1') dp[i] += dp[i - 2];
if(i > 1 && s[i - 1] == '2' && s[i] >= '0' && s[i] <= '6') dp[i] += dp[i - 2];
}
printf("%llu\n", dp[n]);
}
return 0;
}