[XJOI]最大K段和 题解
题目:XJOI335
传送门 [ >XJOI< ]
重要提示:您的膜法等级必须达到3级6段才可使用本传送门,否则您会被小猫痛扁
因为博主太懒,不提供题面(QAQ)...
很容易想到使用DP,设f[i][j]为第i个段,第i-1段以j-1为终点的最大可能和。
于是引出递推式:f[i][j] = max(f[i-1][k]) 其中k枚举且k<j。
然后优化DP,使用一个数组来保存max(f[i-1][k])的值省去枚举。
发现该数组必须使用交替的方式来保证需要的值不被覆盖。
最后一步发现f数组的第一维可以省去,空间不会溢出,得解!
附上一段垃圾代码:
#include <cstdio> #include <queue> #include <cstring> #define ll long long using namespace std; ll p[5005],f[5005],Max[2][5005]; int main() {int n, m, k, i;scanf("%d %d %d",&n,&m,&k);for (i=1;i<=n;i++)scanf("%lld",&p[i]);ll max_ans=0;for (i=1;i<=k;i++){int j;Max[0][0] = 0;for (j=(i-1)*m+1;j<=(n-m+1);j++){ll tmp = 0;for (int K=0;K<m;K++)tmp+=p[j+K];if (j - m > 0)f[j]=Max[0][j - m]+tmp;else f[j]=tmp;if (f[j]>Max[1][j-1]||j==((i-1)*m+1))Max[1][j]=f[j]; else Max[1][j]=Max[1][j-1];if (i==k&&f[j]>max_ans)max_ans=f[j];}memset(Max[0],0,sizeof(Max[0]));for (j=(i-1)*m+1;j<=(n-m+1);j++)Max[0][j]=Max[1][j];}printf("%lld",max_ans);return 0; }
别问我为什么要压行,XJ老是拦截(QWQ),我也没办法啊。
转载于:https://www.cnblogs.com/linzhengmin/p/9446194.html
[XJOI]最大K段和 题解相关推荐
- 如何计算k段流水线执行n条指令的执行时间
来源:http://blog.sina.com.cn/s/blog_4ec38d4f01007uw2.html 计算k段流水线执行n条指令的执行时间,有必要区分两种情况: 如果流水线中的各段执行时间均 ...
- [2020多校A层11.25]最大K段和(反悔贪心)
[2020多校A层11.25]最大K段和 对于一个长度为n的序列,求解不相交的k段使得他们的总和最大,输出最大值. n<=1e5 对于这种问题,我们没有思路求解,可以考虑枚举,发现无法枚举,然后 ...
- 牛客题霸 [ 最小的K个数] C++题解/答案
牛客题霸 [ 最小的K个数] C++题解/答案 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 题解: 如果有n&l ...
- 牛客题霸 [寻找第K大] C++题解/答案
牛客题霸 [寻找第K大] C++题解/答案 题目描述 有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的 ...
- 计算k段流水线执行n条指令的执行时间
计算k段流水线执行n条指令的执行时间,有必要区分两种情况: 如果流水线中的各段执行时间均为t,那么执行n条指令的时间就是执行第一条指令的时间kt,加上其余n-1条指令各执行一段的时间(n-1)t. 如 ...
- 要传送的报文共 x ( bit )。从源点到终 点共经过 k 段链路,每段链路的传播时延为 d ( s ),数据率为 b ( bit / s )。在电路交换时电路的建立时间为 s ( s )。在分组交
1.题目 要传送的报文共 x ( bit ).从源点到终点共经过 k 段链路,每段链路的传播时延为 d ( s ),数据率为 b ( bit / s ).在电路交换时电路的建立时间为 s ( s ). ...
- newcoder Tachibana Kanade Loves Probability(小数点后第k位)题解
题意: 题目链接 立华奏在学习初中数学的时候遇到了这样一道大水题: "设箱子内有 n 个球,其中给 m 个球打上标记,设一次摸球摸到每一个球的概率均等,求一次摸球摸到打标记的球的概率&quo ...
- 2020牛客暑期多校训练营(第八场)K - Kabaleo Lite 题解
[原题传送门] Tired of boring WFH (work from home), Apollo decided to open a fast food restaurant, called ...
- 牛客题霸 [链表中倒数第k个结点] C++题解/答案
链表中倒数第k个结点 题解: 我们把链表存两份,让其中一个先走k个节点,然后两个链表一起走,直到第一个链表到头,因为两个相差k个节点,所以第二个链表停的位置就是倒数第k个 代码: /* struct ...
最新文章
- 【Spark篇】---SparkStream初始与应用
- 字符串基本操作 c语言,数据结构C语言字符串的基本操作.doc
- 异地多活场景下的数据同步之道 | 珍藏版
- [网络安全自学篇] 二十四.基于机器学习的入侵检测和攻击识别——以KDD CUP99数据集为例
- PHP+Ajax手机移动端发红包实例
- @Python 程序员,如何实现狂拽酷炫的 3D 编程技术?
- candence pcb走线等长_Allegro的通用等长规则设置方法
- javascript获取元素样式值
- 在微信中实现一键调用扫一扫
- 360浏览器html文件无图标,360浏览器在网页的右键里不显示审查元素怎么了
- 研修国学请注意选好教材
- 分别计算二维数组主对角线元素与辅对角线元素的和。
- 院士大牛们一年N篇7点以上SCI的诀窍
- 信息增益与信息增益率详解
- css firefox hack,firefox 专属css hack
- 【Python】根据多个列同时进行多条件筛选数据
- 微信小程序支付功能用服务器吗,微信小程序 支付功能 服务器端(TP5.1)实现...
- 【50关于Visual Studio 2019控制台输出中文出现乱码问题及解决办法】
- 《Deep Learning with Python》(中文版)—读书笔记
- Node.js:Buffer基础