前缀和与差分
van之风
这个作者很懒,什么都没留下…
展开
-
P5638 【CSGRound2】光骓者的荣耀
抽丝剥茧,仔细读题,其实就是考察 一个数列中,连续K个数,找出期中最大的连续K个数的和sum,然后用数列总的和减去sum 就是这道题的答案了~ 当然别忘了 :一定要开long long int ,ai的取值范围<=10^12 n<=106,这个数列最大的和是1018 long long 的数据范大约是 1018+,所以可以容纳1018 下面是AC code~ #include <iostream> #include <cstring> using namespac...原创 2020-08-28 17:55:12 · 314 阅读 · 0 评论 -
P2004 领地选择
思路:二维数组的前缀和,用这个做很快的~ #include <iostream> #include <cstring> using namespace std; typedef long long int ll; #define Max 1001 ll a[Max][Max]; ll matrix[Max][Max]; ll sum[Max][Max]; ll M=-999999; int main() { ll n,m,L; l..原创 2020-08-28 16:33:39 · 302 阅读 · 0 评论 -
P1719 最大加权矩形
这道题用暴力就是前缀和,四层for循环,我们这里用另外一种压缩矩阵的方法做.~emmm思路就不写了,有疑问看看dalao的博客 #include <iostream> #include <cstring> using namespace std; #define Max 130 int a[Max][Max]; int b[Max]; int dp[Max]; int M=-9999; int main() { int n; ci..原创 2020-08-28 13:20:30 · 372 阅读 · 0 评论 -
P3397 地毯
这道题暴力其实也可以过,但是最好不要暴力了,能过都是运气而已,正经做法用差分。二维差分来做,不知道的差分的去康康其他dalao的博客~ #include <iostream> #include <cstring> using namespace std; #define Max 1005 int a[Max][Max]; int c[Max][Max]; int main() { memset(a,0, sizeof(a)); m...原创 2020-08-26 10:55:54 · 186 阅读 · 0 评论 -
P1115 最大子段和
这是一道很好的动态规划的入门题,用暴力当然也能解决,但是肯定会超时,如果是填空题用暴力和动归差不多…用暴力的时间复杂度是o(n^2) n的数据达到10 ^ 5是受不了的,但是用动态规划的时间复杂度是o(n ) . 主要讲解动态规划如何做: 设置一个状态 dp[i] 表示以i为下标结尾的最长子段和(数组下标从1开始). 我们用用例来举例子; 7 2 -4 3 -1 2 -4 3 dp[1]=2 a[1] dp[2]= -2 a[1]+a[2] dp[3]=3 a[3] dp[4]=.原创 2020-08-25 11:56:45 · 230 阅读 · 0 评论