男人八题其二(POJ 1738) 石子合并 GarsiaWachs算法
来源:互联网 发布:java反射机制的优缺点 编辑:程序博客网 时间:2024/05/22 03:29
楼天城楼教主:男人八题:POJ 1737 - POJ 1744
男人八题其二: POJ 1738 石子合并
石子合并的核心算法是DP,但是最有效率的还是GarsiaWachs算法,这种算法的核心思路如下:
设序列是stone[],从左往右,找一个满足stone[k-1] <= stone[k+1]的k,找到后合并stone[k]和stone[k-1],再从当前位置开始向左找最大的j,使其满足stone[j] > stone[k]+stone[k-1],插到j的后面就行。一直重复,直到只剩下一堆石子就可以了。在这个过程中,可以假设stone[-1]和stone[n]是正无穷的。
根据这个思路可以很简单的做出一道石子合并的题目(NYOJ 737)
题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=737
AC代码: https://github.com/Kiritow/OJ-Problems-Source/blob/master/NYOJ/737.cpp
但是这道题数据量很大(N~50000),纯DP无法使用二维数组,而刚才的那套方法使用的STL vector不说,还有很多没有意义的数据移动(vector这种连续性容器使用erase和insert的代价可能是巨大的)。因此需要在移动过程中进行判断,同时调整合并起点以及操作点来避免重复的无意义移动。网上的代码研究了很长时间,自己添加了一些注释方便理解。
题目链接: http://poj.org/problem?id=1738
AC代码:https://github.com/Kiritow/OJ-Problems-Source/blob/master/POJ/1738.cpp
- 男人八题其二(POJ 1738) 石子合并 GarsiaWachs算法
- poj 1738--石子合并 [GarsiaWachs算法]
- poj 1738 DP(石子合并的GarsiaWachs算法)
- 石子合并(GarsiaWachs算法)
- 石子合并(GarsiaWachs算法)
- 石子合并的GarsiaWachs算法
- POJ 1738 An old Stone Game 石子合并之GarsiaWachs算法
- [GarsiaWachs算法] BZOJ 3229 [Sdoi2008]石子合并 & POJ 1738 An old Stone Game & 51Nod 1023 石子归并 V3
- BZOJ-3229 石子合并 GarsiaWachs算法
- HYSBZ-3229 石子合并(GarsiaWachs算法优化)
- BZOJ 3229 [Sdoi2008]石子合并 GarsiaWachs算法
- BZOJ 3229: [Sdoi2008]石子合并 GarsiaWachs算法
- 【GarsiaWachs算法】bzoj3229: [Sdoi2008]石子合并
- POJ 1738:An old Stone Game 石子归并(GarsiaWachs算法)
- 石子归并(GarsiaWachs算法)
- poj1738 An old Stone Game 石子合并(归并) GarsiaWachs算法
- poj1738 An old Stone Game 石子合并(归并) GarsiaWachs算法
- 石子合并问题 (朴素区间DP&&GarsiaWachs算法)
- HDU 1242 BFS-Rescue
- tabLeview的静态分组使用
- 封锁机制以及读锁和写锁的区别
- java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
- 简单用tcp实现一个client和sever间通信
- 男人八题其二(POJ 1738) 石子合并 GarsiaWachs算法
- nyoj 244 16 进制简单运算
- Spring Data JPA
- 【HDU】2196 - Computer(树的直径)
- c++ primer 学习(四) 函数
- C#控制台基础 结构,类在声明的同时初始化
- 关于JavaScript substr() 方法
- int与string类型转换
- Oracle10g忘记system,sys密码的解决办法。