牛客网【每日一题】3月27日 数学考试

题号 NC15553
名称 数学考试
来源 2018年长沙理工大学第十三届程序设计竞赛
链接:https://ac.nowcoder.com/acm/problem/15553
来源:牛客网
试题传送门
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format:
%lld

题目描述
今天qwb要参加一个数学考试,这套试卷一共有n道题,每道题qwb能获得的分数为ai,qwb并不打算把这些题全做完,
他想选总共2k道题来做,并且期望他能获得的分数尽可能的大,他准备选2个不连续的长度为k的区间,
即[L,L+1,L+2,…,L+k-1],[R,R+1,R+2,…,R+k-1](R >= L+k)。

输入描述:

第一行一个整数T(T<=10),代表有T组数据 接下来一行两个整数n,k,(1<=n<=200,000),(1<=k,2k <= n)
接下来一行n个整数a1,a2,…,an,(-100,000<=ai<=100,000)

输出描述:

输出一个整数,qwb能获得的最大分数

示例1
输入

2
6 3
1 1 1 1 1 1
8 2
-1 0 2 -1 -1 2 3 -1

输出

6
7

题解:
题意就是求不想交的前缀与后缀和的最大值
第一反应是线段树(毕竟是有关区间查询 ) ,不过仔细想想也不能这么麻烦(打线段树不累吗? ) ,不过也有大佬用线段树做的。
根据题意知道前缀与后缀长度一样,依据朴素的原则单纯打暴力肯定不行,需要优化优化,怎么优化呢?

我们先求出所有前缀和q[]
然后按照给定前后缀的长度k,求出每个k长区间的和
比如 -1 0 2 -1 -1 2 3 -1 k=2;
每个k长区间的和为:w[]-1 2 1 -2 1 5 2
我们所要求的最大值max=dp1+dp2
dp1是前缀和最大值
dp2是后缀和最大值
那其实就是在w中取一个dp1再取一个dp2,使他们和最大
但注意前缀与后缀不能相交和相连
方法一:
稍微处理下,可以先选后缀,然后前缀的范围就是去除已选的后缀,在里面取最大的前缀
maxx=(q[i]-q[i-k])+max(q[1],q[2],q[3]…q[i-k-1])
(q[i]-q[i-k])后缀和
max(q[1],q[2],q[3]…q[i-k-1])最大的前缀
然后求出maxx的最大值情况
诶,这不就是线性dp吗!wok做完才注意到
方法二:
求出前缀和所能取到的最大值(从头开始),放入数组w1
求出后缀和所能取到的最大值(从尾开始),放入w2中
然后再一个循环,求出w1[i]与w2[i+1](即当前位i的前缀和与排在i之后的最大后缀和之和)的最大值
代码一

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
typedef long long ll;
using namespace std;
const int inf=2e5+4;
ll a[inf];
ll q[inf];
ll w[inf];
ll w1[inf],w2[inf];
int main()
{int t;cin>>t;int n,k;ll cnt;while(t--){cin>>n>>k;for(int i=1;i<=n;i++){cin>>cnt;q[i]=q[i-1]+cnt; }memset(w1,-128,sizeof(w1));memset(w2,-128,sizeof(w2));cnt=-1e10;for(int i=k;i<=n;i++){w[i]=q[i]-q[i-k];} for(int i=k;i<=n;i++){w1[i]=w[i]>w1[i-1]?w[i]:w1[i-1];if(i>=k){if(w[i]+w1[i-k]>cnt)cnt=w[i]+w1[i-k];}}cout<<cnt<<endl;}return 0;
}

代码二

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
typedef long long ll;
using namespace std;
const int inf=2e5+4;
ll a[inf];
ll q[inf];
ll w[inf];
ll w1[inf],w2[inf];
int main()
{int t;cin>>t;int n,k;ll cnt;while(t--){cin>>n>>k;for(int i=1;i<=n;i++){cin>>cnt;q[i]=q[i-1]+cnt; }memset(w1,-128,sizeof(w1));memset(w2,-128,sizeof(w2));cnt=-1e10;for(int i=k;i<=n;i++){w[i]=q[i]-q[i-k];} for(int i=k;i<=n-k+1;i++)w1[i]=w[i]>w1[i-1]?w[i]:w1[i-1];for(int i=n-k+1;i>=k+1;i--)w2[i]=w2[i+1]>w[i+k-1]?w2[i+1]:w[i+k-1];for(int i=k;i<=n-k+1;i++){if(w2[i+1]+w1[i]>cnt)cnt=w2[i+1]+w1[i];}cout<<cnt<<endl;}return 0;
}

对了还有变形的问题:
(等晚上有空再想吧)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SPFA】重建道路(jzoj 1212)

重建道路 jzoj 1212 题目大意&#xff1a; 有一个图&#xff0c;其中的一些路坏了&#xff0c;为了从a走到b&#xff0c;问最少修复多长的路 输入样例 3 2 1 2 1 2 3 2 1 1 2 1 3输出样例 1数据范围 2⩽N⩽1002\leqslant N\leqslant 1002⩽N⩽100 N−1⩽D⩽M⩽N∗(N−1)/…

ASP.NET CORE 根据环境变量支持多个 appsettings.json

0.背景在开发项目的过程当中&#xff0c;生产环境与调试环境的配置肯定是不一样的。拿个最简单的例子来说&#xff0c;比如连接字符串这种东西&#xff0c;调试环境肯定是不能连接生产数据库的。在之前的话&#xff0c;这种情况只能说是你 COPY 两个同名的配置文件来进行处理。…

GYM101933I - Intergalactic Bidding

GYM101933I - Intergalactic Bidding 题解&#xff1a;不考虑首先显然是个背包&#xff0c;一开始直接用set模拟&#xff0c;然后map存方案&#xff0c;这样会mle。发现物品的体积有的特殊性 only one participant was allowed to make a bid at a time, each participant was …

【结论】【dfs】费解的开关(joyoi-tyvj 1266)

费解的开关 joyoi-tyvj 1266 题目大意&#xff1a; 有5*5的一个图&#xff0c;每个点的数值是1或0&#xff0c;如果将一个点的数值取反&#xff0c;那这个点上下左右的点都会取反&#xff0c;现在问你将所有点都变为1最少要多少步&#xff0c;如果步数大于6或无法全变成1的话…

P3586-[POI2015]LOG【线段树】

正题 题目链接:https://www.luogu.com.cn/problem/P3586 题目大意 nnn个数&#xff0c;有操作 修改一个数假如每次选出ccc个正数让它们减去111&#xff0c;求能否进行操作sss次。 解题思路 如果有cntcntcnt个数大于sss那么有解当且仅当满足cnt≥ccnt\geq ccnt≥c或者小于sss…

小G的项链(Manacher)

我看网上也没有写这个题的&#xff0c;顺便写一下&#xff08;可能是大佬都觉得太简单了 &#xff09; 链接&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld 题目描述…

基于Win10极简SonarQube C#代码质量分析

博客有些好些时间未更新了&#xff0c;这几个月的时间里&#xff0c;离开了实习的公司、大学毕了业、来了新公司、转了户口&#xff0c;有点忙&#xff0c;最近总算稍微闲下来了&#xff0c;打算重新拾起博客&#xff0c;坚持写下去。言归正转&#xff0c;什么是SonarQube ?So…

2018年牛客多校算法寒假训练营练习比赛(第一场)C. 六子冲

2018年牛客多校算法寒假训练营练习比赛&#xff08;第一场&#xff09;C. 六子冲 题目链接 做法&#xff1a;模拟即可 #include <bits/stdc.h> #define P pair<int,int> #define fir first #define sec second #define rep(i,a,b) for(int ia;i<b;i) using name…

YbtOJ#20078-[NOIP2020模拟赛B组Day7]路径之和【分治,Flody】

正题 题目链接:http://noip.ybtoj.com.cn/contest/108/problem/4 题目大意 nnn个点&#xff0c;每次只封闭一个点&#xff0c;求剩下点对两两之间的最短路和。 解题思路 FlodyFlodyFlody中如果枚举kkk时不管某一个点&#xff0c;那么就可以求不经过那个点的路径。考虑分治求解…

大吉大利【牛客网】(牛客练习赛60)

传送 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format:%lld 题目描述 输入描述: 第一行一个整数n. 第二行n个整数ai. 输出描述: 一个整数表示上述求和式的答案. 示例1 输入 5 1 2 3 4 5输出…

【差分】Tallest Cow(poj 3263/luogu 2879)

Tallest Cow poj 3263 luogu 2879 题目大意&#xff1a; 现在有n头牛&#xff0c;两头牛如果要相互看到&#xff0c;那他们之间的牛必须比他们两低&#xff0c;现在给出n&#xff0c;最高牛的位置和高度&#xff0c;和m对关系&#xff0c;要你求每头牛最高是多少 输入样例…

【项目管理】git和码云的使用

缘起说了那么多关于git和码云相关的事&#xff0c;一直都没给大伙讲解这个码云究竟是个啥玩意儿。今天就给大伙说说如何通过git和码云搭建属于自己的代码库。码云码云(GitOSC)是开源中国社区团队推出的基于Git的快速的、免费的、稳定的在线代码托管平台,不限制私有库和公有库数…

牛客网暑期ACM多校训练营(第十场)F.Rikka with Line Graph

牛客网暑期ACM多校训练营&#xff08;第十场&#xff09;F.Rikka with Line Graph 做法&#xff1a;\(G\) 中的对应原图两条边(a,b) (c,d)的最短路为:\[ w[a][b] w[c][d] 2* min(dis[a][c], dis[a][d], dis[b][c], dis[b][d])\] 其中\(dis[i][j]\)表示原图G中i 到 j 的最短路…

AT2165-[AGC006D]MedianPyramidHard【二分,贪心】

正题 题目链接:https://www.luogu.com.cn/problem/AT2165 题目大意 nnn行的一个金字塔&#xff0c;第iii层有2i−12\times i-12i−1个格子&#xff0c;每个格子是它左右下的中位数。给出最下面的2n−12n-12n−1个数&#xff0c;求第一行的数。 解题思路 我们先二分一个答案&a…

三角形周长和【牛客网】牛客网练习赛60

题目传送 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format:%lld 题目描述 输入描述: 输入描述 第一行一个整数表示n. 接下来n行每行两个整数x,y表示一个点. 输出描述: 输出一个整数表示周长…

【二分】递增(luogu 3902)

递增 luogu 3902 题目大意&#xff1a; 给出一个序列&#xff0c;问最少修改多少个数字可以使他单调递增 输入样例 3 1 3 2输出样例 1 数据范围 对于50% 的数据&#xff0c;N≤103N \le 10^3N≤103 对于100% 的数据&#xff0c;1≤N≤105,1≤Ai≤1091 \le N \le 10^5 , …

AspNetCore 基于AOP实现Polly的使用

前言 说起AOP&#xff0c;其实我们在做MVC/API 的时候应该没少接触&#xff0c;比如说各种的Fitter 就是典型的AOP了。本来在使用Polly的时候我最初的打算是使用过滤器来实现的&#xff0c;后来发现实现起来相当的困难&#xff0c;利用NetCore的中间以及过滤器去实现一个AOP的…

HDU5794 - A Simple Chess

HDU5794 - A Simple Chess 做法&#xff1a;首先的想法就是用总方案数减去&#xff0c;经过过障碍的方案数A。第一个思路就是容斥&#xff0c;但是显然不符合数据规模。另一个思路就是将障碍物从左上到右下排序&#xff0c;dp[i] 表示不经过前i-1个障碍&#xff0c;到达第i个障…

P1829-[国家集训队]Crash的数字表格/JZPTAB【莫比乌斯反演】

正题 题目链接:https://www.luogu.com.cn/problem/P1829 题目大意 给出n,mn,mn,m求∑i1n∑j1mlcm(i,j)\sum_{i1}^n\sum_{j1}^mlcm(i,j)i1∑n​j1∑m​lcm(i,j) 解题思路 ∑i1n∑j1mijgcd(i,j)\sum_{i1}^n\sum_{j1}^m\frac{ij}{gcd(i,j)}i1∑n​j1∑m​gcd(i,j)ij​ ∑x1nx(∑…

.NET Core开发日志——配置

熟悉ASP.NET的开发者一定对web.config文件不陌生。在ASP.NET环境中&#xff0c;要想添加配置参数&#xff0c;一般也都会在此文件中操作。其中最常用的莫过于AppSettings与ConnectionStrings两项。而要在代码中获得文件中的配置信息&#xff0c;ConfigurationManager则是必不可…