题意:

有n个数,找两个段(每个段长度为k)不相交,求出这两个段的和的最大值。

输出两个段的起始下标。

思路:

dp[i][j]:走到i,已经选了j个段的最大值。

转移:dp[i][j] = dp[i-k][j-1] + sum[i]-sum[i-k];

输出方案的话,根据dp的值dfs回去(不dfs也是可以的),因为方案已经记录在dp的转移中。

code:

#include <cmath>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;typedef long long LL;
const int MAXN = 2*1e5+5;
const int INF = 0x3f3f3f3f;int n, k;
int r1 = INF, r2 = INF;
LL dp[MAXN][3], sum[MAXN];
void dfs(int idx, int ti) {if(ti == 0 || idx < k) return ;if(dp[idx][ti] == dp[idx-1][ti])dfs(idx-1, ti);else if(dp[idx][ti] == dp[idx-k][ti-1] + sum[idx]-sum[idx-k]) {dfs(idx-k, ti-1);if(ti == 2) r2 = min(r2, idx-k+1);else r1 = min(r1, idx-k+1);}
}int main() {scanf("%d%d", &n, &k);int tmp;for(int i = 1;i <= n; i++) {scanf("%d", &tmp);sum[i] = sum[i-1]+tmp;}//memset(dp, 0, sizeof(dp));for(int i = k;i <= n; i++) {for(int j = 1;j <= 2; j++) {dp[i][j] = max(dp[i][j], dp[i-1][j]);if(j == 1 || dp[i-k][j-1] != 0)dp[i][j] = max(dp[i][j], dp[i-k][j-1]+sum[i]-sum[i-k]);}}//pathdfs(n, 2);printf("%d %d\n", r1, r2);return 0;
}

codeforces 332b Maximum Absurdity dp相关推荐

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

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

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

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

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

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

  4. CodeForces 332B Maximum Absurdity

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

  5. Codeforces 332B Maximum Absurdity(暴力)

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

  6. CodeForces - 332B  Maximum Absurdity   前缀和

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

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

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

  8. codeforces B.Maximum Absurdity 解题报告

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

  9. codeforce 332B Maximum Absurdity

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

最新文章

  1. linux rsync 带密码,Linux配置ssh无密码验证,rsync
  2. linux wifi 配置 编程,linux 无线手动配置
  3. 保温杯哪种材质最好_哪种保温杯质量好?
  4. 当append遇到make遇到的坑
  5. R语言神经网络与深度学习(一)
  6. Educational Codeforces Round 65 (Rated for Div. 2) C. News Distribution
  7. c语言中next和prior连在一起,C语言中双向链表和双向循环链表详解
  8. Winform 中 dataGridView 导出到Excel中的方法总结
  9. 中国车机行业竞争态势与未来发展策略分析报告2022-2028年
  10. 在Android上实现汉字笔顺动画效果
  11. 2022年美容师(初级)操作证考试题库及模拟考试
  12. Packet Tracer 和 Wirshark 抓取数据包
  13. AAAI2021知识图谱论文集
  14. 二维码如何制作?简单的制作方法介绍
  15. Mysql中使用关键字name做字段名
  16. png格式的icon使用方法
  17. win10 werfault.exe 内存不能read 修复
  18. 力扣算法学习(十二)
  19. Android Studio连接安卓手机驱动
  20. mysql - user/privileges/用户与权限/用户权限/管理用户权限

热门文章

  1. jsp70860基于web的大学教室管理系统
  2. php+mysql+apache集成安装包
  3. 网站如何防止DDOS攻击?
  4. 概率论-一维随机变量及其分布思维导图
  5. 朴素贝叶斯算法系列:多项式贝叶斯、高斯贝叶斯、伯努利贝叶斯
  6. 【2023年最新版】Kali安装详细教程
  7. 263邮件服务器地址,263企业邮箱 服务器IP汇总
  8. 如何在浏览器中支持H265/HEVC
  9. 左耳听风 第二十一周
  10. Java 学习笔记 - AutoCloseable、Closeable