【发布时间】:2015-12-29 13:22:44
【问题描述】:
下面是这个SPOJ问题的实现:www.spoj.com/problems/ACODE/
#include <bits/stdc++.h>
using namespace std;
char str[5002];
int main() {
scanf("%s",str);
while(str[0]!='0')
{
int len=strlen(str);
long long dp[len+1]={0};
/*base case*/
dp[0]=1;
int i=1; //i for index
while(i<len)
{
int num=(str[i-1]-'0')*10;
num+=str[i]-'0';
/*checking for valid 1 digit number*/
if(str[i]-'0') //Why minus '0'*10
{
dp[i]=dp[i-1];
}
/*checking for two digit number*/
if(num>9 && num<=26)
{
dp[i]+=dp[i-2<0?0:i-2]; //How does this work?
}
i++;
}
printf("%lld\n",dp[len-1]);
scanf("%s",str);
}
return 0;
}
以下是我不明白的事情:- 为什么dp初始化为0? 为什么我们减去'0'*10? dp[i-1] 和 dp[i-2] 部分是如何工作的?
【问题讨论】:
-
这是 C++ 代码吗?是你写的,还是别人的,因为你看不懂?
-
解释这行的代码?那是一整页代码! ;)
-
@WeatherVane - 注意:
using namespace std; -
@BobJarvis 这就是我评论的原因(连同
#include <bits/stdc++.h>) -
啊——刚刚注意到它被标记为
c。固定...
标签: c++ string dynamic-programming