poj2033 dp

a对应1,b对应2……z对应26,给一串数,问译成字母有多少种不同的情况?

要注意0的问题!

有些丑陋了……

#include <iostream> #include <string> using namespace std; int dp[60000],i,j,ans,k,tmp; string s,t; int main() { while (cin >> s && s!="0") { s+="10"; ans=1; k=0; for (i=0;i<s.length();i++) if (s[i]=='0') { t=s.substr(k,i-1-k); //cout << t << endl; k=i+1; if (t=="") continue; memset(dp,0,sizeof(dp)); dp[0]=1; dp[1]=1; for (j=1;j<t.length();j++) { dp[j+1]=dp[j]; tmp=(t[j-1]-'0')*10+t[j]-'0'; if (tmp<=26) dp[j+1]+=dp[j-1]; } ans*=dp[t.length()]; } cout << ans << endl; } system("pause"); return 0; }

你可能感兴趣的:(System)