codevs3327选择数字(单调队列优化)
3327 选择数字
给定一行n个非负整数a[1]..a[n]。现在你可以选择其中若干个数,但不能有超过k个连续的数字被选择。你的任务是使得选出的数字的和最大。
第一行两个整数n,k
以下n行,每行一个整数表示a[i]。
输出一个值表示答案。
5 2
1
2
3
4
5
12
对于20%的数据,n <= 10
对于另外20%的数据, k = 1
对于60%的数据,n <= 1000
对于100%的数据,1 <= n <= 100000,1 <= k <= n,
0 <= 数字大小 <= 1,000,000,000
90分代码(其实数据弱,能A的,只是我太弱2333):
/*
f[i]表示前i个数选k个的最大值
因为不能连续k个选,所以枚举一下断点
但这个题貌似是个单调队列优化......
嗯,,,那就学吧
先上个暴力dp
*/ #include<iostream>
#include<cstdio>
#define maxn 10000001 using namespace std; int n,m,k;
int f[maxn],s[maxn],a[maxn]; int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
s[i]=s[i-]+a[i];
}
for(int i=;i<k;i++)
f[i]=s[i];
for(int i=k;i<=n;i++)
for(int j=i-k;j<=i;j++)
{
f[i]=max(f[i],f[j-]+s[i]-s[j]);
}
printf("%d\n",f[n]);
}
心若向阳,无谓悲伤
单调队列优化:
/*
考虑从第一位开始递推处理
在第i位的时候,需要在i-k位(取i-k+1到i)到i(不取i)中找一个点不取
设这个点为j,这一段连续的就是j+1到i
那么f[i] = max{f[j-1] + sum[j+1, i]} (i-k<=j<=i)
运用前缀和简化一下就是f[i] = max{f[j-1]-sum[j]+sum[i]}+f[i];
发现max里面的值只与j有关,所以可以用单调队列优化转移。
*/ #include<iostream>
#include<cstdio>
#define LL long long
#define maxn 100010 using namespace std;
LL n,k,a[maxn],s[maxn],f[maxn];
LL head,tail=,d[maxn],q[maxn]; LL que(LL j)
{
d[j]=f[j-]-s[j];
while(head<=tail&&d[q[tail]]<d[j]) tail--;
q[++tail]=j;
while(head<=tail&&q[head]<j-k) head++;
return d[q[head]];
} int main()
{
scanf("%lld%lld",&n,&k);
for(LL i=;i<=n;i++)
scanf("%lld",&a[i]),s[i]=s[i-]+a[i];
for(LL i=;i<=n;i++)
{
LL t=-;
f[i]=que(i)+s[i];
}
cout<<f[n];
return ;
}
心若向阳,无言悲伤
codevs3327选择数字(单调队列优化)的更多相关文章
- 「单调队列优化DP」P2034 选择数字
「单调队列优化DP」P2034 选择数字 题面描述: 给定一行n个非负整数a[1]..a[n].现在你可以选择其中若干个数,但不能有超过k个连续的数字被选择.你的任务是使得选出的数字的和最大. 输入格 ...
- Codeforces 1077F2 Pictures with Kittens (hard version)(DP+单调队列优化)
题目链接:Pictures with Kittens (hard version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:数据量5000, ...
- 【单调队列优化dp】 分组
[单调队列优化dp] 分组 >>>>题目 [题目] 给定一行n个非负整数,现在你可以选择其中若干个数,但不能有连续k个数被选择.你的任务是使得选出的数字的和最大 [输入格式] ...
- 洛谷P3975 跳房子 [DP,单调队列优化,二分答案]
题目传送门 跳房子 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一 ...
- Luogu 2627 修建草坪 (动态规划Dp + 单调队列优化)
题意: 已知一个序列 { a [ i ] } ,求取出从中若干不大于 KK 的区间,求这些区间和的最大值. 细节: 没有细节???感觉没有??? 分析: 听说有两种方法!!! 好吧实际上是等价的只是看 ...
- BZOJ 3126 [USACO2013 Open]Photo (单调队列优化DP)
洛谷传送门 题目大意:给你一个长度为$n$的序列和$m$个区间,每个区间内有且仅有一个1,其它数必须是0,求整个序列中数字1最多的数量 神题,竟然是$DP$ 定义$f_{i}$表示第i位放一个1时,最 ...
- [NOIP2017普及组]跳房子(二分,单调队列优化dp)
[NOIP2017普及组]跳房子 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 nn 个格子, ...
- [poj3017] Cut the Sequence (DP + 单调队列优化 + 平衡树优化)
DP + 单调队列优化 + 平衡树 好题 Description Given an integer sequence { an } of length N, you are to cut the se ...
- Codeforces 445A Boredom(DP+单调队列优化)
题目链接:http://codeforces.com/problemset/problem/455/A 题目大意:有n个数,每次可以选择删除一个值为x的数,然后值为x-1,x+1的数也都会被删除,你可 ...
随机推荐
- 重置默认样式 css reset
html { overflow-x:auto; overflow-y:scroll; } body, dl, dt, dd, ul, ol, li, pre, form, fieldset, inpu ...
- UVA - 808 Bee Breeding (建立坐标系&找规律)
题目: 输入两个格子的编号a和b(a,b≤10000),求最短距离.例如,19和30的距离为5(一条最短路是19-7-6-5-15-30). 思路: 如图建立坐标系,然后看两个点的向量如果位于二四象限 ...
- 关于zookeeper和zkfc的一些测试
1.停掉zookeeper集群 ****进程影响****** zkfc:报错无法连接zookeeper.ClientCnxn java.net.connectexception:拒绝连接,但不会shu ...
- jetty添加容器容器提供包
在tomcat的使用中,我们常常会吧容器提供的包放入:TOMCAT_HOME\lib下, 比如mysql-connection-java-version.jar 在使用jetty容器的时候,若要让容器 ...
- 设置idea快速生成doc comment
在eclipse中快速生成方法的doc comment快捷键是Alt+Shift+J, 而在idea中没有对应的快捷键,但是能实现相似的功能. 1.在方法上面输入/** 然后回车就可以生成注释了. 2 ...
- [luoguP1586] 四方定理(DP 背包)
传送门 相当于背包, f[i][j] 表示当前数为 i,能分解成 j 个数的平方的和的数量 那么就是统计背包装物品的数量 ——代码 #include <cmath> #include &l ...
- hdu 2604 矩阵快速幂模板题
/* 矩阵快速幂: 第n个人如果是m,有f(n-1)种合法结果 第n个人如果是f,对于第n-1和n-2个人有四种ff,fm,mf,mm其中合法的只有fm和mm 对于ffm第n-3个人只能是m那么有f( ...
- nyoj_116_士兵杀敌(二)_201404131107
士兵杀敌(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常 ...
- kendo grid 点击新增没有反映
在datasource中缺少 editable: "inline",这一行
- 常见的HTTP状态码(HTTP Status Code)
HTTP状态码 当使用浏览器访问一个网页时,浏览器会向网页所在服务器发出请求.当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览 ...