bzoj4937: [Ceoi2016]popeala
Description
你办了一场比赛,有n给人参加,只有一道题,有m个数据点,标号为1~m,每个测试点都有一个分数a[i]。现在所
Input
Output
每次dp多分一段,dp时状态转移方程可分为O(n)段,且段之间的分界单调右移,用单调队列维护每个段的最值即可转移,时间复杂度O(nmS)
#include<bits/stdc++.h>
const int inf=0x7f7f7f7f;
int _(){
int x=,c=getchar();
while(c<)c=getchar();
while(c>)x=x*+c-,c=getchar();
return x;
}
void mins(int&a,int b){if(a>b)a=b;}
int min(int a,int b){return a<b?a:b;}
int n,m,q,a[],p0[];
char s[][];
int f[],t[],g[];
struct Q{
int q[],ql,qr,id;
void clr(){ql=,qr=;}
void ins(int x){
if(f[x]==inf)return;
int v=f[x]-a[x]*id;
while(ql<=qr){
int y=q[qr];
if(f[y]-a[y]*id>=v)--qr;
else break;
}
q[++qr]=x;
}
void del(int x){
if(ql<=qr&&q[ql]==x)++ql;
}
int gmn(int w){
if(ql>qr)return inf;
int x=q[ql];
return f[x]+(a[w]-a[x])*id;
}
}qs[];
int main(){
n=_(),m=_(),q=_();
for(int i=;i<=m;++i)a[i]=_()+a[i-];
for(int i=;i<=n;++i){
scanf("%s",s[i]+);
qs[i].id=i;
for(int j=;j<=m&&s[i][j]=='';++j)f[j]+=a[j];
}
printf("%d\n",f[m]);
for(int i=;i<=q;++i){
for(int j=;j<=n;++j){
p0[j]=;
qs[j].clr();
}
f[]=inf;
for(int j=;j<=m;++j){
qs[t[j]=n].ins(j-);
for(int k=;k<=n;++k)if(s[k][j]==''){
for(int z=p0[k]+;z<=j;++z){
qs[ t[z]].del(z-);
qs[--t[z]].ins(z-);
}
p0[k]=j;
}
g[j]=inf;
for(int k=;k<=n;++k)mins(g[j],qs[k].gmn(j));
}
memcpy(f,g,sizeof(int)*(m+));
printf("%d\n",f[m]);
}
return ;
}
bzoj4937: [Ceoi2016]popeala的更多相关文章
- [Ceoi2016|BZOJ4936] Match
哈希+分治+stack 题目: 给你一个由小写字母组成的字符串s,要你构造一个字典序最小的(认为左括号的字典序比右括号小)合法的括号 序列与这个字符串匹配,字符串和括号序列匹配定义为:首先长度必须相等 ...
- 正睿OI DAY3 杂题选讲
正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...
随机推荐
- German Collegiate Programming Contest 2013-B:Booking(贪心)
Booking Pierre is in great trouble today! He is responsible for managing the bookings for the AC ...
- 流程控制之if
流程控制 假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动机的.你要判断那条岔路是你真正要走的路,如果我们想让程序也 ...
- 《DSP using MATLAB》Problem 5.1
恰逢清明,这几天是清明时节雪纷纷,断崖式降温:又回到了老家,儿时上蹿下跳的核桃树,远去的故乡,远去的时代…… 用到的公式: 这里只放前两个小题的计算过程,都比较简单,细心就行.代码如下: %% --- ...
- MySQL数据库安装和介绍
一.概述 1.什么是数据库 ? 答:数据的仓库,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access.MS SQL Server等 ? 答:他们均是一种软件,都有两个主要的功 ...
- (转)Redis(四)哨兵_sentinel
发现一篇文章写的特别的详细,所以在这里转载,记录一下.照着文章中的内容自己动手实践了. 原文地址:http://blog.csdn.net/a67474506/article/details/5043 ...
- 【java编程】ServiceLoader使用看这一篇就够了
转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...
- 生产环境部署MongoDB副本集(带keyfile安全认证以及用户权限)
本文同步于个人Github博客:https://github.com/johnnian/Blog/issues/8,欢迎留言. 安装软件包:mongodb-linux-x86_64-3.4.1.tgz ...
- JS正则表达式验证身份证号码
function isCardNo(card) { // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X var reg = /(^\d{1 ...
- HTTP redirect 重定向到 HTTPS
最近帮一个顾客做网站, 需要HTTPS. 之前接触的SSL certificate直接上传到plesk 上面勾选重定向即可. 在此先吐槽下godaddy 服务贵功能还少. 用代码从HTTP来重定向到 ...
- pri 知识点
pri github:https://github.com/prijs/pri 添加路由后动态导入,使用的是 react-loadable:https://github.com/jamiebuilds ...