摘要: 题面: 为一维字段和最大值的二维拓展版; 考虑固定右下端点(i,j)然后固定子矩阵的高度为k,那么就可以转化为一维的最大字段和。 空间可以优化到0(n) 时间复杂度o(n^3) #include<bits/stdc++.h> #define ll long long using namespace 阅读全文
posted @ 2020-12-02 20:39 cumtljz 阅读(89) 评论(0) 推荐(0) 编辑
摘要: 1049是最大字段和的最朴素版本,1254加的地方是可以交换两个数一次。 51nod 1049 #include<bits/stdc++.h> #define ll long long using namespace std; const int N=1e5+1000; ll a[N]; int n 阅读全文
posted @ 2020-12-02 20:36 cumtljz 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 题面: 题解:由于这题是环形的,最大字段和可能会出现在首尾端相连的情况,这样的情况就是整段序列和减去中间最小的负数端字段和(可将原数组取反求出最大字段和即为原数组最小的负数段字段和)。 #include<bits/stdc++.h> #define ll long long using namesp 阅读全文
posted @ 2020-12-02 20:11 cumtljz 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 题面: 题解:要求正字段中最小的,我们考虑先求出所有前缀和,对所有前缀和从小到大排序。下面说明最优答案一定出现在相邻的两个合法前缀中: 1.如果两个相邻前缀合法,那么[i,i+1]一定比[i,i+2]合法。 2.如果两个相邻的前缀相同,那么最优解可能存在于[i,i+2],当我们把相同值的id小的放到 阅读全文
posted @ 2020-12-02 20:05 cumtljz 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 这三个版本最大的区别就是数据范围的区别:N<=5000时,用n^2的dp可以过;当n达到50000时,用nlogn的dp可以过。 51nod 1052: 设dp[i][j]表示前j个数分成i段的最大字段和,转移方程由:dp[i][j]=max(max(dp[i-1][k](k=1...j-1)),d 阅读全文
posted @ 2020-12-02 19:56 cumtljz 阅读(123) 评论(0) 推荐(0) 编辑