soj - 1001 Alphacode
2016-04-03 01:00
295 查看
样例输入:
25114
1111111111
3333333333
0
输出:
6
89
1
乍一看这道题,好像可以用dfs解,但是结果还是体现了dfs的老问题:速度太慢,所以结果就是超时。所以后来我想到了动态规划,一下子就解决了:
#include <iostream> using namespace std; int size; int arr[10000]; int dp[10000]; void DP() { for (int i = 1; i < size; i++) { // 如果这一位不是0,则可以单独组一位,首先加上前一位的结果 dp[i] = 0; if (arr[i] != 0) { dp[i] += dp[i-1]; } // 如果这一位可以和前一位组合,则可以加上前两位的结果(注意i=1的特殊情况) if (arr[i-1] != 0 && (arr[i-1]*10+arr[i] <= 26)) { if (i > 1) dp[i] += dp[i-2]; else dp[i] += 1; } } } int main() { string s; while (cin >> s && s != "0") { size = s.length(); // 首先转换成整形数组 for (int i = 0; i < size; i++) { arr[i] = s[i] - '0'; } // 然后进行动态规划 dp[0] = 1; DP(); cout << dp[size-1] << endl; } return 0; }
未完待续-明天再看看有没有其他方法可以解。
相关文章推荐
- 解决Java中MD5加密utf-8格式时与其他语言不同的问题
- CA Loves GCD
- spring @Qualifier注解使用
- ASP.NET MVC HtmlHelper之Html.ActionLink
- 安卓调用百度地图定位自己的位置,然后分享自己的位置信息生成链接短串。
- 百度面试经历
- python3 发送邮件功能
- Dubbo学习过程、使用经验分享及实现原理简单介绍
- 大端vs小端
- lintcode:恢复IP地址
- MyBatis初探二
- 刷题(soj、voj)总结
- Quick cocos2dx-Lua中计时器(scheduler)
- 数组与字符串简单剖析
- C/C++中的指针
- skynet
- hadoop的unknownhostexception
- JNI log来代替printf打印调试
- 分享一个网址
- C++ 11的新特性(初识)