【算法学习笔记】33.在线算法 SJTU OJ 1006 求和游戏
2015-04-23 01:56
267 查看
1006. 求和游戏
Description
石柱上有一排石头键盘,每个键上有一个整数。请你在键盘上选择两个键,使这两个键及其之间的键上的数字和最大。如果这个最大的和不为正,则输出“Game Over"。Input Format
第1行:键的个数n。第2..n+1行:键上的数字整数 ai。
−100≤ai≤100
对于70%的数据,2≤n≤1,000
对于100%的数据,2≤n≤1,000,000
Output Format
一行,最大和或者”Game Over"。Sample Input
5 3 -5 7 -2 8
Sample Output
13
Sample Input
3 -6 -9 -10
Sample Output
Game Over
这个题和之前关于求最大子列和的文章非常相似,但是又有不同,因为这是一个应用题...它要求至少要有两个键才行,所以最小的子序列也要保证长度大于等于2.
那么在这种情况下,我们原来的在线算法就不能直接使用了.
这里有两个新的在线算法来完成这个问题, 一个是专门为这个问题而改良的,一个是全新的思路可以解决原问题和这个新问题.
新在线算法1:
核心思想依然是:遇到了负数可以进行重置当前和. 但是在驱动的过程中要考虑到始终保持最小长度为2,所以要不断的错位来完成这件事情.
再处理的过程中,我们所需要决策的就是i一定是要续接上的,至于头部是继续上一次的,还是它的前一个位置 只需比较一下大小即可.
如果n[i-1]比当前的和大, 那么就从它开始续接不就好啦~ 如果当前和更大, 那就要继续下去
代码如下:[/code]
int main() { int num(0); cin >> num; int result(0); int total(0), smallest(32785); //smalest 表示的是从第一个数开始 的 连续子序列和最小的时候的那个和 也就是以某一个数为尾端 //total 表示的是从 第一个数 开始 到 现在 为止的所有数的和 也就是以现在为尾端 //两者相减就是 从smallest结尾 到现在为止的子序列和 然后用result来维护最大值 for (int i = 0, temp; i < num; ++i) { cin >> temp; total += temp; //result = max(result, total-smallest) //在此处由于smallest维护的是到前2个数为止的 //那么相减的结果必然会至少包含前一个数 if (result < total - smallest) result = total - smallest; //smallest = min(smallest, total-temp ) //此处维护的smallest是从第一个数到当前数的前2个数的 //因为i饿total - temp 其实是到i-1为止的total if (smallest > total - temp) smallest = total - temp; } if (result > 0) cout << result << endl; else cout << "Game Over\n"; }
View Code
补充链接:
http://blog.csdn.net/hcbbt/article/details/10454947 六种方法解决连续子序列最大和
http://www.cnblogs.com/txd0u/p/3353355.html 1006题解
相关文章推荐
- 【算法学习笔记】68.枚举 SJTU OJ 1272 写数游戏
- 【算法学习笔记】55.DFS 记忆化搜索 SJTU OJ 1063 小M爱滑雪
- 【算法学习笔记】78. STL二分的练习 下标映射的处理技巧 SJTU OJ 1053 二哥的内存
- 【算法学习笔记】67.状态压缩 DP SJTU OJ 1383 畅畅的牙签袋
- 【算法学习笔记】41.并查集 SJTU OJ 1283 Mixture
- 【算法学习笔记】86.栈 中缀表达式 SJTU OJ 1033 表达式计算
- 【算法学习笔记】46.拓扑排序 优先队列 SJTU OJ 3010 Complicated Buttons
- 【算法学习笔记】74. 枚举 状态压缩 填充方案 SJTU OJ 1391 畅畅的牙签袋(改)
- 【算法学习笔记】27.动态规划 解题报告 SJTU OJ 1254 传手绢
- 【算法学习笔记】39.字符串处理 单词分割 SJTU OJ 1302 缩进格式
- 【算法学习笔记】40.树状数组 动态规划 SJTU OJ 1289 扑克牌分组
- 【算法学习笔记】83.排序辅助 动态规划 SJTU OJ 1282 修路
- 【算法学习笔记】69. 枚举法 字典序处理 SJTU OJ 1047 The Clocks
- 【算法学习笔记】24.记忆化搜索 解题报告 SJTU OJ 1002 二哥种花生
- 【算法学习笔记】64. 枚举法 SJTU OJ 1381 畅畅的牙签
- 【算法学习笔记】31.动态规划 SJTU OJ 1320 numtri
- 【算法学习笔记】60.经典动态规划 SJTU OJ 1370 赫萝的桃子
- 【算法学习笔记】82.素数生成 数据范围利用 SJTU OJ 1020 分解质因数
- 【算法学习笔记】38.最短路问题 SJTU OJ 1105 path
- 【算法学习笔记】28.枚举法 解题报告 SJTU OJ 1255 1256 魔戒