《算法竞赛-训练指南》第二章-2.4-LA 3516
来源:互联网 发布:淘宝定时开售怎么设置 编辑:程序博客网 时间:2024/06/06 17:43
这几天一直静不下心,做题一点都没有效率。也可能是动态规划这边的题目实在是有点难度,所以有时候搞一道题目都弄的很长时间,很悲催。在一个就是自己的智商不怎么样。
这道题目的意思是给你一个序列,求出以这个序列为准的,所有的树。
这样就得实用递归求解了,也就是每个树都可以分成左子树和右子树,这两种书其实又可以看成是独立的树。所以就分成了子问题求解,非常的不错。
递推方程就是 dp(i, j) = sum(dp(i + 1, k - 1) * dp(k, j))。当然k是从1 - len - 1的。这样就可以把所有的树都可以求出来了。就是我用的是vis记忆化搜索,也可以使d[i] = -1,记忆化搜索。
贴出代码:
#include <stdio.h>#include <string.h>#include <iostream>#include <string>using namespace std;const int MOD = 1000000000;char str[333];int d[333][333];int vis[333][333];int dp(int i, int j){if (vis[i][j]){return d[i][j];}vis[i][j] = 1;if (i == j){d[i][j] = 1;return 1;}if (str[i] != str[j]){d[i][j] = 0;return 0;}int& ans = d[i][j];for (int k = i + 2; k <= j; k++){if (str[i] == str[k]){ans = (ans + (long long)dp(i + 1, k - 1) * (long long)dp(k, j)) % MOD;}}return ans;}int main(){while (scanf("%s", str) != EOF){int len = strlen(str);memset(vis, 0, sizeof(vis));memset(d, 0, sizeof(d));printf("%d\n", dp(0, len - 1));}//system("pause");return 0;}
- 《算法竞赛-训练指南》第二章-2.4-LA 3516
- 《算法竞赛-训练指南》第二章-HDU_2018
- 《算法竞赛-训练指南》第二章-2.4-pre_Catalan
- 《算法竞赛-训练指南》第二章-数论常用算法总结
- 《算法竞赛-训练指南》第二章-2.1_UVa 11538
- 《算法竞赛-训练指南》第二章-2.2_UVa 11401
- 《算法竞赛-训练指南》第二章-2.3_UVa 11806
- 《算法竞赛-训练指南》第二章-2.5_UVa 11361
- 《算法竞赛-训练指南》第二章-2.9_UVa 11426
- 《算法竞赛-训练指南》第二章-2.12_LA 5059
- 《算法竞赛-训练指南》第二章-2.14_UVa 11021
- 《算法竞赛-训练指南》第二章-2.15_UVa 11722
- 《算法竞赛-训练指南》-第二章-2.16_UVa 11427
- 《算法竞赛-训练指南》-第二章-2.18_UVa 10294
- 《算法竞赛-训练指南》第二章-数论_高斯消元
- 《算法竞赛-训练指南》第二章-2.26_UVa 10341
- 《算法竞赛-训练指南》第二章-2.27_LA 5009
- 《算法竞赛-训练指南》第一章-1.25-LA 2965
- HDU 1532
- (原创)C#中的单例模式-笔记
- 视频监控之VSCloud 视频浏览
- 内核模块编程之模块工具的使用
- BigList
- 《算法竞赛-训练指南》第二章-2.4-LA 3516
- ubuntu下svn配置
- c++中delete与delete[]的区别
- 焦秸忠障史泻焕桃霉尤
- android 在XML向ViewGroup中添加组件
- 黑马程序员—IO流(下)File类、管道流、PrintStream、序列流、propertis
- 将excel导入数据库 (sql server)
- win7下mpich配置及fortran编译(64位及32位)
- C中位域结合对齐(pragma)的例子及解释