首页 > 其他分享 >P2034题解

P2034题解

时间:2023-08-16 15:23:26浏览次数:36  
标签:P2034 int 题解 long ans dp

P2034题解

题目描述

给定一行 \(n\) 个非负整数 \(a_1 \cdots a_n\)。现在你可以选择其中若干个数,但不能有超过 \(k\) 个连续的数字被选择。你的任务是使得选出的数字的和最大。

题解

正难则反,考虑将原问题转化为从 \(a\) 中选若干数使得,任意两数差不大于 \(k\),求答案最小。

观察到问题类似于滑动窗口,考虑单调队列优化dp。还是那句话如果一个选手比你小,还比你强,你就可以退役了

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+100;
int n,k,a[N],dp[N],ans=LLONG_MAX,sum;
list<int>q;
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	cin>>a[i],sum+=a[i]; 
	memset(dp,63,sizeof(dp));
	dp[0]=0;
	q.push_back(0);
	for(int i=1;i<=n;i++)
	{
		if(q.front()<i-k-1)
		q.pop_front();
		dp[i]=min(dp[i],dp[q.front()]+a[i]);
		while(dp[i]<=dp[q.back()])
		q.pop_back();
		q.push_back(i);
	}
	for(int i=n;i>=n-k;i--)
	{
		ans=min(ans,dp[i]);
	}
	cout<<sum-ans;
	return 0;
}

标签:P2034,int,题解,long,ans,dp
From: https://www.cnblogs.com/ddream123/p/17635160.html

相关文章

  • ZS Shuffles Cards 题解
    ZSShufflesCards题解我们把每一次抽一些数字牌再抽到joker视作一局游戏。每局期望轮数首先考虑\(f_i\)表示每一局游戏抽出\(i\)张牌的概率。那么就是先抽出\(i-1\)张数字牌,再抽出一张joker。概率就是:\[f_i=\fracm{n+m-i+1}\prod_{k=0}^{i-2}......
  • CF1858A Buttons题解
    思路我们可以让两人先拿\(c\)里面的,因为\(a\)和\(b\)肯定是自己的,那么公共的“我”也要抢的越多越好,所以我们都要先拿\(c\)里面的。如果\(c\)是奇数,那么先手一定多拿\(1\)个\(c\)里面的,相当于先手可以拿\(a+1\)个,后手可以拿\(b\)个;如果\(c\)是偶数,那么两......
  • CF1858C Yet Another Permutation Problem 题解
    思路这个题是一个简单的构造题。竟然比T2简单,也是少见我们可以首先从\(1\)开始不断乘以\(2\),像这样:\(1,2,4,8,16\cdots,2^x\),直到什么时候超过\(n\)就停止。这样相邻两个数字就可以凑出\(1,2,4,6,\cdots,2^{x-1}\),保证两两不同。然后我们可以从\(3\)开始不......
  • 2023“钉耙编程”中国大学生算法设计超级联赛(9)- 1003 Reasoning 题解
    题目翻译基本符号有一推理系统,其中有这些符号:括号\((\)和\()\);逻辑连接词\(\lnot\)和\(\rightarrow\);全称量词\(\forall\);变量\(u\simz\);常量\(a\sime\);函数\(f\simh\);谓词\(P\simT\)。这些符号是构成系统的基础,他们之间能够组合出一些其他概念:项(term......
  • P3572题解
    P3572题解题面翻译有\(n\)棵树排成一排,第\(i\)棵树的高度是\(d_i\)。有\(q\)只鸟要从第\(1\)棵树到第\(n\)棵树。当第\(i\)只鸟在第\(j\)棵树时,它可以飞到第\(j+1,j+2,\cdots,j+k_i\)棵树。如果一只鸟飞到一颗高度大于等于当前树的树,那么它的劳累值会增......
  • CF1060E Sergey and Subway 题解
    题面由题意可知,在原图中经过边数为\(2\)的一对点,在新图中经过边数为\(1\)。所以每对点在新图中的距离为:\[\begin{aligned}\lceil\frac{dis(i,j)}{2}\rceil=\frac{dis(i,j)+dis(i,j)\;mod\;2}{2}\end{aligned}\]那么我们只需在原图上求出任意两点距离之和并加上\(dis......
  • 国标GB28181视频监控平台EasyGBS国标平台无法播放,抓包返回ICMP的问题解决方案
    国标GB28181视频平台EasyGBS是基于国标GB/T28181协议的行业内安防视频流媒体能力平台,可实现的视频功能包括:实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。国标GB28181视频监控平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的......
  • winform窗体闪烁问题解决方式
    winform窗体闪烁问题解决方式1、使用窗体双缓冲SetStyle(ControlStyles.UserPaint|ControlStyles.AllPaintingInWmPaint|ControlStyles.OptimizedDoubleBuffer,true);UpdateStyles();窗体的DoubleBuffered 指示是否对控件进行双缓存处理。2、使用CreateParams的使用......
  • CF1858C Yet Another Permutation Problem 题解
    杂言赛时想到做法,结果调code把自己心态调炸了,所以来写一篇题解(恼)。另:此题与P9345夕阳西下几时回几乎相同,可以此练手。另另:本题多测,多测不清空,爆零两行泪。题意翻译\(a_1,a_2,\dots,a_n\)是\(1\)至\(n\)的一个排列,记\(d_i=\gcd(a_i,a_{i\bmodn+1})\)。构造一个......
  • CF1188D Make Equal 题解
    题意给定\(n\)个数\(a_1,a_2,\cdots,a_n\),每次操作可以给其中的一个数加上\(2\)的非负整数次幂。求最小的操作次数,使得这\(n\)个数相等。题解首先考虑如何计算操作次数,设\(maxa=\max\limits_{i=1}^{n}a_i\),如果我们把这\(n\)个数操作成了数\(x\)(\(x\gemax......