题目链接:戳我

一个优先队列优化DP

一定要注意第二关键字的排序啊!!我真的是菜,被坑了好久qwq

设\(f[i]\)表示前i个的最小答案,从前面选择的时候第一关键字是f[j]的大小,第二关键字是要确保[j+1,i]区间产生的贡献尽可能小

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define MAXN 300010
using namespace std;
int n,k;
int f[MAXN],sum[MAXN];
struct Node
{
int pos,f;
friend bool operator < (Node x,Node y)
{
if(x.f==y.f) return sum[x.pos]>sum[y.pos];
return x.f>y.f;}
};
priority_queue<Node>q;
char s[MAXN];
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
// freopen("ce.out","w",stdout);
#endif
scanf("%d%d",&n,&k);
scanf("%s",s+1);
for(int i=1;i<=n;i++)
{
if(s[i]=='H') sum[i]=sum[i-1]+1;
else sum[i]=sum[i-1]-1;
}
// for(int i=1;i<=n;i++) printf("sum[%d]=%d\n",i,sum[i]);
q.push((Node){0,0});
for(int i=1;i<=n;i++)
{
while(!q.empty()&&q.top().pos<i-k) q.pop();
Node cur;
int cur_ans;
if(sum[i]-sum[q.top().pos]<=0) cur_ans=1;
else cur_ans=0;
cur.f=q.top().f+cur_ans;
f[i]=cur.f;
cur.pos=i;
// printf("i=%d f=%d top_pos=%d\n",i,cur.f,q.top().pos);
q.push(cur);
}
printf("%d\n",f[n]);
return 0;
}

USACO19JAN Redistricting的更多相关文章

  1. [USACO19JAN]Redistricting——单调队列优化DP

    原题链接 首先有一个\(O(nk)\)的很显然的\(dp\),把荷斯坦牛看成\(1\),把更赛牛看成\(-1\),这样就可以很方便地通过前缀和来判断某一段中谁有优势了 考虑怎么优化,观察转移: \[f ...

  2. USACO比赛题泛刷

    随时可能弃坑. 因为不知道最近要刷啥所以就决定刷下usaco. 优先级排在学习新算法和打比赛之后. 仅有一句话题解.难一点的可能有代码. 优先级是Gold>Silver.Platinum刷不动. ...

  3. 清明欢乐赛(USACO选题)

    总传送门 T1. [USACO19JAN] Redistricting P luogu P5202 思路: 这种每次选出段长有个上限\(k\)的常常是和单调队列有关. 这里是单调队列优化dp 不过一开 ...

  4. 树状数组 || 线段树 || Luogu P5200 [USACO19JAN]Sleepy Cow Sorting

    题面:P5200 [USACO19JAN]Sleepy Cow Sorting 题解: 最小操作次数(记为k)即为将序列倒着找第一个P[i]>P[i+1]的下标,然后将序列分成三部分:前缀部分( ...

  5. P5204 [USACO19JAN]Train Tracking 2

    P5204 [USACO19JAN]Train Tracking 2 毒毒题,对着嘤文题解看了贼久 首先考虑此题的一个弱化版本:如果输入的所有\(c_i\)相等怎么做 现在假设有\(len\)个数,取 ...

  6. USACO19JAN Gold题解

    噩梦的回忆.. 上周日在机房打的模拟赛,结果十分惨烈,就最后一题yy出了正解结果玄学的只拿了80 考试结果:0+0+80=80 订正时对着T3打了2hours结果还是90 订正结果:100+100+9 ...

  7. P5200 [USACO19JAN]Sleepy Cow Sorting

    P5200 [USACO19JAN]Sleepy Cow Sorting 题目描述 Farmer John正在尝试将他的N头奶牛(1≤N≤10^5),方便起见编号为1…N,在她们前往牧草地吃早餐之前排 ...

  8. [USACO19JAN]Exercise Route

    题目 这题的数据有点水,暴力合并\(set\)好像过了 分析一下这个题的性质,发现我们一条非树边就会形成一个环,而我们要求选择两个非树边,就会形成两个环,要求不走重复的点,就是说我们需要走一个大环,且 ...

  9. [USACO19JAN]Cow Poetry

    题面 Solution: 这是一道很好的dp题. 一开始看不懂题面没有一点思路,看了好久题解才看懂题目... \(y[i]\) 为第 \(i\) 个词结尾,\(l[i]\) 为第 \(i\) 个词长度 ...

随机推荐

  1. DevOps 之 Jenkins 安装、配置、美化、插件及常见错误处理

    继续上一篇的话题,既然已经搭建了 GitLab 的代码仓库,那么现在就可以开始进行下一步持续集成环境的搭建了.公司准备利用 Jenkins CI 进行持续集成,本文记录了 Jenkins 的安装.基础 ...

  2. 异常-Throwable的几个常见方法

    package cn.itcast_04; import java.text.ParseException; import java.text.SimpleDateFormat; import jav ...

  3. Oracle连接字符串总结(转)

    Oracle XE 标准连接 Oracle XE(或者"Oracle Database 10g Express Edition")是一个简单免费发布的版本. 以下是语法格式: Dr ...

  4. 短信对接——一种jdbc链接运用

    package sms; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamRead ...

  5. frp 路由穿透(github开源穿透软件)

    server配置(windows):下载: https://github.com/fatedier/frp/releases [common] # 服务器端端口 bind_port = # 客户端连接 ...

  6. JavaWeb【七、JSP状态管理】

    http协议无状态性 当提交请求,服务器返回响应.但当同一用户同一浏览器再次提交请求,服务器并不知道与刚才的请求是同一用户浏览器发起. 保存用户状态的两大机制 Session-保存在服务器端 Cook ...

  7. Git切换分支并提交到远程分支

    1. 在本地需要提交的文件同级目录运行git bash 2. 初始化 git 运行环境 $ git init 3. 新建本地分支develop $ git checkout -b decelop 4. ...

  8. 语义分割之RefineNet

    背景介绍 近来年,深度卷积网络在目标检测方面取得了一定的成绩.但对于密集预测,仍存在一定不足,原因是频繁的卷积和池化导致最终的特征分辨率降低. 针对这个问题,目前主要采用两种方法:第一种:空洞卷积,如 ...

  9. 【2017-04-10】js来控制导航栏在滚动条拉到一定位置时显示

    <html> <head> <title>test</title> </head> <body> <div style=& ...

  10. js动态添加控件(输入框为例)

    写在前面 昨天得到一个需求,需要在账户登记页面中动态添加输入框,经过半天的捣鼓,最终完美成型,写下来跟大家分享下, 供大家参考 开始复制代码了 如果复制了我所有代码的话,注意看js最后面方法的备注,最 ...