标签:div 字段 turn 划算 约瑟夫问题 问题 span 匹配 复杂度
任务说明:数组,链表,队列,栈,都是线性结构。巧用这些结构可以做出不少方便的事情。
约瑟夫问题
P1115 最大子段和
做了这个题才颠覆了我对最大字段和的认识。
以前默认的解法就是用dp[i] 表示 a[0..i] 的和,然后用二重循环相减,求出最大子段和。
提交了发现才过了两个点,剩下的三个点TLE。
然后看了题解才发现原来可以这么做:就是用一个变量来记录读进来数字的当前子段和,如果发现这个变量(当前子段和)比零小,那么就把它置0。因为后面那一坨不论是啥,前面加个负数都不划算,所以这么解最优。
时间复杂度O(N), 空间复杂度O(1)
1 #include <iostream> 2 #include <cstdio> 3 #include <vector> 4 #include <climits> 5 using namespace std; 6 7 int main () { 8 int n; 9 cin >> n; 10 int ans = INT_MIN, dp = 0; 11 for (int i = 1; i <= n; ++i) { 12 int x; 13 cin >> x; 14 if (i == 1) { 15 dp = ans = x; 16 } else { 17 dp = dp + x > 0 ? dp + x : x; 18 } 19 ans = max(ans, dp); 20 } 21 cout << ans << endl; 22 return 0; 23 }
表达式括号匹配
队列安排
后缀表达式
【Luogu】【关卡2-13】线性数据结构(2017年10月)
标签:div 字段 turn 划算 约瑟夫问题 问题 span 匹配 复杂度
原文地址:http://www.cnblogs.com/zhangwanying/p/7637024.html