题目链接:http://codeforces.com/problemset/problem/332/B

题目大意:
给你n个数和一个整数k,要求找到不相交的两个长度为k的区间,使得区间和最大,输出这两个区间的起点。
解题思路:
先计算前缀和,然后预处理出maxsum[i],maxsum[i]记录i~n最大的长度为k子段的和。
然后再去枚举即可。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<vector>
 5 #include<string>
 6 #include<string.h>
 7 #include<cctype>
 8 #include<math.h>
 9 #include<stdlib.h>
10 #include<stack>
11 #include<queue>
12 #include<set>
13 #include<map>
14 #define lc(a) (a<<1)
15 #define rc(a) (a<<1|1)
16 #define MID(a,b) ((a+b)>>1)
17 #define fin(name)  freopen(name,"r",stdin)
18 #define fout(name) freopen(name,"w",stdout)
19 #define clr(arr,val) memset(arr,val,sizeof(arr))
20 #define _for(i,start,end) for(int i=start;i<=end;i++)
21 #define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
22 using namespace std;
23 typedef long long LL;
24 const int N=5e6+5;
25 const LL INF64=1e18;
26 const int INF=0x3f3f3f3f;
27 const double eps=1e-10;
28
29 LL sum[N];      //记录前缀和
30 LL maxsum[N]; //maxsum[i]记录i~n最大的长度为k子段的和
31 int idx[N];      //idx[i]记录相应的i~n最大子段的起点
32
33 int main(){
34     FAST_IO;
35     int n,k;
36     cin>>n>>k;
37     for(int i=1;i<=n;i++){
38         cin>>sum[i];
39         sum[i]+=sum[i-1];
40     }
41     int lim=n-k+1;
42     for(int i=lim;i>=1;i--){
43         LL now=sum[i+k-1]-sum[i-1]; //now为i~i+k-1之和
44         if(now>=maxsum[i+1]){        //因为要保证答案字典序最小,所以下标往小的取
45             maxsum[i]=now;
46             idx[i]=i;
47         }
48         else{
49             maxsum[i]=maxsum[i+1];
50             idx[i]=idx[i+1];
51         }
52     }
53
54     int st1=1,st2=k+1;
55     LL mmax=sum[2*k];
56     for(int i=1;i<=lim-k;i++){
57         LL now=sum[i+k-1]-sum[i-1];
58         if(now+maxsum[i+k]>mmax){ //maxsum[i+k]为i+k~n最大的长度为k的子段和
59             mmax=now+maxsum[i+k];
60             st1=i,st2=idx[i+k];
61         }
62     }
63     cout<<st1<<" "<<st2<<endl;
64     return 0;
65 }

转载于:https://www.cnblogs.com/fu3638/p/9131472.html

Codeforces 332B Maximum Absurdity(DP+前缀和处理)相关推荐

  1. [CodeForces 332B]Maximum Absurdity[DP]

    题目链接: [CodeForces 332B]Maximum Absurdity[DP] 题意分析: 寻找两个不重叠的长度为k的子串,使得它们之和最大. 解题思路: 第一想法是,处理出从这个点开始,长 ...

  2. codeforces 332b Maximum Absurdity dp

    题意: 有n个数,找两个段(每个段长度为k)不相交,求出这两个段的和的最大值. 输出两个段的起始下标. 思路: dp[i][j]:走到i,已经选了j个段的最大值. 转移:dp[i][j] = dp[i ...

  3. 【CodeForces 332B --- Maximum Absurdity】递推

    [CodeForces 332B --- Maximum Absurdity]递推 题目来源:点击进入[CodeForces 332B - Maximum Absurdity] Description ...

  4. CodeForces - 332B  Maximum Absurdity   前缀和

    这道题主要用的前缀和的思想,看了网上大佬的代码感觉很巧妙.我之前有好几个点没注意,WA了好几次,还有就是要用long long类型.不多说了,直接贴AC代码: #include<cstdio&g ...

  5. CodeForces 332B Maximum Absurdity

    http://codeforces.com/problemset/problem/332/B 给出n个数,再个一个长度,问在n个数的数列中,找到2个相应长度的数串求和最大,且这两个数串不能重叠.只要对 ...

  6. Codeforces 332B Maximum Absurdity(暴力)

    题意: 给你一个序列,让你在里面选择两个不想交的长度为k的字段,是的和最大. 我第一次做还是用的dp,感觉复杂度有点高啊,后来发现直接预处理就好了. 预处理需要三个数组,分别是sum[i],Max[i ...

  7. CodeForces 332B Maximum Absurdity(线段树单点更新)

    题意: 给你一个序列,找两个长度为 k 且没有重合区间的数使得其和最大 解析: 线段树,就是把起点为 i 长度为 k 的和预处理出来,再枚举a,与a线段不重合的,后面的部分用线段树来找最大位置,总复杂 ...

  8. codeforce 332B Maximum Absurdity

    原题链接 题意 一个长为N的序列,选择其中2个长为K的不相交区间,使两个区间和最大 题解 CF标签上写的好好的DP,做着做着发现就是前缀和思想嘛,哪里有DP?哪里有DP? #include<bi ...

  9. codeforces B.Maximum Absurdity 解题报告

    题目链接:http://codeforces.com/contest/332/problem/B 题意:在一个序列中,在所有长度为k的区间里找出两个不重叠的最大和,输出这两个最大和所对应的开头的位置a ...

最新文章

  1. 为sort函数指定排序规则时注意的问题以及错误的写法
  2. 动画延迟效果css,每个子元素都有延迟的CSS动画
  3. ML之回归预测:机器学习中的各种Regression回归算法、关键步骤配图
  4. java语言基础与go语言基础,数据类型区别
  5. 计算机应用头部案例提交,基于头部位置的应用程序放置的制作方法
  6. 怎么对document.write写出来的内容调整对齐方式_写论文可能用到的各种Word技巧
  7. python读取数据文件、并把里面的数据变成x的二维坐标_(数据科学学习手札60)用Python实现WGS84、火星坐标系、百度坐标系、web墨卡托四种坐标相互转换...
  8. python装饰器@深度加工(三分钟读懂)
  9. Java开发全套学习!java微服务网关
  10. SqlServer系列笔记——游标
  11. IBM AIX存储层结构及操作命令实现
  12. Atitit。 《吠陀》 《梨俱吠陀》overview 经读后感  是印度上古时期一些文献的总称
  13. 百度地图 绘制运动轨迹_国产免费高配版“谷歌地球”,地图分析用这款软件秒杀谷歌地球...
  14. OA系统如何助力企业行政管理?
  15. 读书笔记之怎样在股市获得稳健收益
  16. MT6573芯片资料集锦MT6575入门手册 V0.2
  17. CTU Open Contest 2019 -A-Beer Barrels
  18. NoticeBar 通知栏组件,封装好的可直接使用
  19. webgis中的比例尺实现
  20. 关于对游戏帧率的学习

热门文章

  1. JavaWeb网上订餐管理系统|餐饮就餐订餐餐厅(含源码+论文+答辩PPT等)
  2. 高性能,高扩展,高可用架构
  3. [转].native的作用
  4. oracle 求时间均值
  5. [机器学习算法]GBDT梯度提升决策树
  6. Windows11之Dev-C++超详细下载安装与使用教程
  7. HTML5视频标签 video 的 poster 属性
  8. 多表联查--01---LEFT JOIN 实现多表联查
  9. Python——输出大写英文字母
  10. CUDA——Python基础与实现