题目链接: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)来保存数据。

 #include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std; #define LL __int64
const int maxn = + ;
LL a[maxn], b[maxn]; int main()
{
int i, j, n, k;
LL tl, maxt, maxl, maxr, ans;
while (scanf("%d%d", &n, &k) != EOF)
{
LL temp = ;
for (i = ; i <= n; i++)
{
scanf("%I64d", &temp);
a[i] = a[i-] + temp; // a[i]保存的是从第1至第i个元素的总和
// printf("a[%d] = %I64d\t", i, a[i]);
}
for (i = , j = ; i <= n-k; i++, j++)
{
b[j] = a[i+k] - a[i];   // b[j]保存的是所有长度为k的区间的总和
// printf("b[%d] = %I64d\t", j, b[j]);
}
maxt = ans = b[];
tl = maxl = maxr = ; // maxl: a maxr:b
for (i = ; i+k <= n-k+; i++) // 循环的判别要注意,要保证取值不能越界
{
if (b[i] > ans) // 状态转移方程中的max{b[i]},用ans保存
{
ans = b[i];
tl = i;
// printf("ans = %I64d\n", ans);
}
if (b[i+k] + ans > maxt)
{
maxt= b[i+k] + ans;
maxl = tl;
maxr = i+k;
// printf("maxt = %I64d\n", maxt);
// printf("maxl = %I64d\tmaxr = %I64d\n", maxl, maxr);
}
}
printf("%I64d %I64d\n", maxl, maxr);
}
return ;
}

codeforces B.Maximum Absurdity 解题报告的更多相关文章

  1. Codeforces Round 665 赛后解题报告(暂A-D)

    Codeforces Round 665 赛后解题报告 A. Distance and Axis 我们设 \(B\) 点 坐标为 \(x(x\leq n)\).由题意我们知道 \[\mid(n-x)- ...

  2. Codeforces Round 662 赛后解题报告(A-E2)

    Codeforces Round 662 赛后解题报告 梦幻开局到1400+的悲惨故事 A. Rainbow Dash, Fluttershy and Chess Coloring 这个题很简单,我们 ...

  3. Codeforces Round #277.5 解题报告

    又熬夜刷了cf,今天比正常多一题.比赛还没完但我知道F过不了了,一个半小时贡献给F还是没过--应该也没人Hack.写写解题报告吧= =. 解题报告例如以下: A题:选择排序直接搞,由于不要求最优交换次 ...

  4. codeforces B. Simple Molecules 解题报告

    题目链接:http://codeforces.com/problemset/problem/344/B 题目意思:这句话是解题的关键: The number of bonds of an atom i ...

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

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

  6. 【LeetCode】414. Third Maximum Number 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 替换最大值数组 使用set 三个变量 日期 题目地址 ...

  7. codeforces 591A. Wizards' Duel 解题报告

    题目链接:http://codeforces.com/problemset/problem/591/A 题目意思:其实看下面这幅图就知道题意了,就是Harry 和 He-Who-Must-Not-Be ...

  8. codeforces 582A. GCD Table 解题报告

    题目链接:http://codeforces.com/problemset/problem/582/A 网上很多题解,就不说了,直接贴代码= = 官方题解: http://codeforces.com ...

  9. codeforces 581C. Developing Skills 解题报告

    题目链接:http://codeforces.com/problemset/problem/581/C 题目意思:给出 n 个数:a1, a2, ..., an (0 ≤ ai ≤ 100).给出值 ...

随机推荐

  1. BZOJ2460 [BeiJing2011]元素

    Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石. 一般地,矿石越多则法力越 ...

  2. HDU2222 Keywords Search [AC自动机模板]

    Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  3. SQL多条件查询

    SELECT a.tel,a.business_code,b.name AS business_name,a.register_time FROM T_RED_USER a LEFT JOIN T_P ...

  4. Centos是什么

    Linux是GNU/Linux的缩写,通常指各种Linux发行版的通称. 常见的Linux厂家主要有Redhat/Novell等. Redhat有两大Linux产品系列,其一是免费的Fedora Co ...

  5. js中日历的代码

    Html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  6. 批处理:echo的用法

    批处理:echo的用法 若要用 echo 命令显示一条命令,可用下述语法:  echo [message] 参数 ON|OFF   指定是否允许命令的回显.若要显示当前的 ECHO 的设置,可使用不带 ...

  7. 【转】websocket协议规范

    在线版目录: 1.引言——WebSocket协议翻译 2.一致性要求——WebSocket协议翻译 3.WebSocket URI——WebSocket协议翻译 4.打开阶段握手——WebSocket ...

  8. linux tail命令的使用方法详解(转)

    本文介绍Linux下tail命令的使用方法.linux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新 ...

  9. 一步一步教你如何在linux下配置apache+tomcat(转)

    一步一步教你如何在linux下配置apache+tomcat   一.安装前准备. 1.   所有组件都安装到/usr/local/e789目录下 2.   解压缩命令:tar —vxzf 文件名(. ...

  10. ssh中getHibernateTemplate()的方法

    spring接着又把业务类中的查询也封装成了find() //用来实现分页 /*HibernateTemplate ht=this.getHibernateTemplate(); DetachedCr ...