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

题意:在一个序列中,在所有长度为k的区间里找出两个不重叠的最大和,输出这两个最大和所对应的开头的位置a和b。

一开始没有想到用dp来做,于是有了以下的错误思路(读者可以忽略):声明一个结构体,包括head(保存起始点)、tail(保存结束点)还有sum(保存长度为k的区间的和)。计算出整个序列所有k个小区间的和sum,按sum从大到小排序(隐含的弊端:排序会导致区间与区间之间起始点和结束点的位置很不确定)由于a、b不能相交,所以当找到没有重叠的部分,就找到当前最优解,但不一定是整个题目的最优解。还要比较各个序列的最优解,以便找到整个题目的最优解,但是重叠的判断会有很多种情况(sum的排序导致的),于是参考了别人的代码......

正确的思路:当然就是用dp做啦。而且,也是需要计算出所有长度为k的区间的和,按顺序保存在数组b[]中(比我的方法好多啦)。接下来是找出状态转移方程:  max{b[i]} + b[i+k]。另外,考虑到数据比较大,所以用长整型(_int 64)来保存数据。

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 using namespace std;
 5
 6 #define LL __int64
 7 const int maxn = 200000 + 10;
 8 LL a[maxn], b[maxn];
 9
10 int main()
11 {
12     int i, j, n, k;
13     LL tl, maxt, maxl, maxr, ans;
14     while (scanf("%d%d", &n, &k) != EOF)
15     {
16         LL temp = 0;
17         for (i = 1; i <= n; i++)
18         {
19             scanf("%I64d", &temp);
20             a[i] = a[i-1] + temp;       // a[i]保存的是从第1至第i个元素的总和
21         //  printf("a[%d] = %I64d\t", i, a[i]);
22         }
23         for (i = 0, j = 1; i <= n-k; i++, j++)
24         {
25             b[j] = a[i+k] - a[i];    // b[j]保存的是所有长度为k的区间的总和26         //  printf("b[%d] = %I64d\t", j, b[j]);
27         }
28         maxt = ans = b[1];
29         tl = maxl = maxr = 1;           // maxl: a   maxr:b30         for (i = 1; i+k <= n-k+1; i++)   // 循环的判别要注意,要保证取值不能越界31         {
32             if (b[i] > ans)            // 状态转移方程中的max{b[i]},用ans保存33             {
34                 ans = b[i];
35                 tl = i;
36         //      printf("ans = %I64d\n", ans);
37             }
38             if (b[i+k] + ans > maxt)
39             {
40                 maxt= b[i+k] + ans;
41                 maxl = tl;
42                 maxr = i+k;
43         //      printf("maxt = %I64d\n", maxt);
44         //      printf("maxl = %I64d\tmaxr = %I64d\n", maxl, maxr);
45             }
46         }
47         printf("%I64d %I64d\n", maxl, maxr);
48     }
49     return 0;
50 } 

转载于:https://www.cnblogs.com/windysai/p/3220305.html

codeforces B.Maximum Absurdity 解题报告相关推荐

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

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

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

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

  3. Codeforces round 654 赛后解题报告

    Codeforces round 654 赛后解题报告 先吐槽一下怎么 A-D 都是结论题啊啊 A. Magical Sticks 我们可以先确定下来,我们一定只对于未进行过拼接的木棍拼接. 学过等差 ...

  4. Codeforces 438D 线段树 解题报告

    D. The Child and Sequence At the children's day, the child came to Picks's house, and messed his hou ...

  5. Codeforces 332B Maximum Absurdity(DP+前缀和处理)

    题目链接:http://codeforces.com/problemset/problem/332/B 题目大意: 给你n个数和一个整数k,要求找到不相交的两个长度为k的区间,使得区间和最大,输出这两 ...

  6. LeetCode: Maximum Subarray 解题报告

    Maximum Subarray Find the contiguous subarray within an array (containing at least one number) which ...

  7. CodeForces 332B Maximum Absurdity

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

  8. codeforces 488A. Giga Tower 解题报告

    题目链接:http://codeforces.com/problemset/problem/488/A 题目意思:给出一个数a,范围是[-10^9, 10^9],问它最少需要加的一个正整数 b 是多少 ...

  9. codeforces A. Cinema Line 解题报告

    题目链接:http://codeforces.com/problemset/problem/349/A 题目意思:题目不难理解,从一开始什么钱都没有的情况下,要向每一个人售票,每张票价格是25卢布,这 ...

最新文章

  1. Oracle中sysdba身份和dba角色区别
  2. Solr安装步骤 + dataimport导入数据配置
  3. 【译】From Smart Contracts to Courts with not so Smart Judges
  4. 编程挑战系统的输入和输出详细说明
  5. as400还有发展前景吗_web前端还有发展前景吗?该如何去学习
  6. linux下gcc的编译过程详解
  7. IntelliJ Idea学习笔记001--- IntelliJ Idea常用快捷键列表
  8. 更新k8s镜像版本的三种方式
  9. java项目学习_一个Java项目的学习
  10. cad多个窗口并排显示_高版本CAD如何显示阵列窗口?
  11. Linux学习笔记5-linux中的磁盘
  12. PRML Chapter 02 Probability Distributions
  13. js在光标处插入内容
  14. keytool的使用
  15. Simulink代码生成:Simulink Function子系统及其代码
  16. (十二):为什么需要一个新的ORM框架
  17. 硬路由、软路由、主路由、旁路由对比分析
  18. C++ 汇编代码分析——递归函数调用、浮点数比较、选择语句
  19. 逻辑回归中的梯度下降法
  20. 横河川仪压力变送器故障代码_压力变送器常见故障及解决办法

热门文章

  1. java 语言的简介
  2. 非零基础自学Golang 第15章 Go命令行工具 15.4 注释文档(doc)
  3. 老股民箱底翻出发黄纸质股票 如今价值超过20万
  4. C语言实现MD5加密算法
  5. Jfinal-Controller层注入Service空指针异常
  6. 赵栋《面向对象程序设计(java)》第十四周学习总结
  7. 关于Solidworks打包的更好的方式(并保留部分文件结构)——使用“另存为”保存装配体
  8. matlab与maple互联,Maple与Matlab
  9. mac电脑安装maple2017
  10. 3GPP TS 23501-g51 中英文对照 | 5.2.1 General