[luogu_U15116]珈百璃堕落的开始
https://www.zybuluo.com/ysner/note/1239458
题面
给定\(n\)个二元组\((x,y)\),问有多少种方案,使得选出其中几个后,\(\sum x=\sum y\)。
- \(nm\leq5*10^7,m\leq10^6\)
解析
在打比赛时又被傻逼DP切了
考虑到我们关注的是\(x-y\),我们可以维护一维状态\(x-y\)以代替\(x,y\)两维状态。
于是设\(f[i][j]\)表示在第\(1-i\)个数中,\(x-y=j\)的方案数。
\(x-y\)可以为负,记得开大空间。
转移显然。
但有几个要注意的地方。
如果暴力枚举\(j\),复杂度可以达到\(O(10^6n)\),数据没有保证\(n\)这样能过。
注意到\(10^6\)中有很多转移是从不合法状态转移到不合法状态。
既然开始状态为\(f[0][10^6]\)(防止状态出现负数),范围很小。我们可以维护一下当前被转移到了的区间范围,这样能大大降低时间复杂度。
还有,\(dp\)值的边界条件要求必须能把未转移到的状态和转移到的状态区分开来。
所以初始所有\(dp\)值要设为\(-inf\),\(dp[0][10^6]\)除外。
// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#define re register
#define il inline
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define fp(i,a,b) for(re int i=a;i<=b;i++)
#define fq(i,a,b) for(re int i=a;i>=b;i--)
using namespace std;
const int N=2e6+100,M=1e6;
int n,m,s[N],c[N],len,dp[2][N];
char a[N];
il ll gi()
{
re ll x=0,t=1;
re char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') t=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*t;
}
int main()
{
n=gi();
fp(i,1,n)
{
scanf("%s",a+1);len=strlen(a+1);
fp(j,1,len) if(a[j]=='s') s[i]++;else if(a[j]=='c') c[i]++;
}
re int now=1,nxt=0,lasx=M,lasm=M,mn=M,mx=M;
memset(dp,-63,sizeof(dp));dp[1][M]=0;
fp(i,1,n)
{
swap(now,nxt);
fp(j,lasm,lasx)
{
dp[now][j+s[i]-c[i]]=max(dp[now][j+s[i]-c[i]],dp[nxt][j]+s[i]);
dp[now][j]=max(dp[now][j],dp[nxt][j]);
dp[nxt][j]=0;
mx=max(mx,j+s[i]-c[i]),mn=min(mn,j+s[i]-c[i]);
}
lasx=mx;lasm=mn;
}
printf("%d\n",dp[now][M]);
return 0;
}
[luogu_U15116]珈百璃堕落的开始的更多相关文章
- 【转】锤子CTO钱晨:福利好是一种堕落的公司文化
“这是拉勾网对锤子科技CTO钱晨的访谈,作为中国手机界三大产品经理之一,他带领着一众硬件工程师在手机红海中厮杀.钱晨喜欢焦虑的工程师,佩服有方向感的人. 本文作者:西岳 拉勾网原创出品,转载请注明作者 ...
- CYQ.Data、ASP.NET Aries 百家企业使用名单
如果您或您所在的公司正在使用此框架,请联系左侧的扣扣,告知我信息,我将为您添加链接: 以下内容为已反馈的用户,(收集始于:2016-08-08),仅展示99家: 序号 企业名称 企业网址 备注 1 山 ...
- Redis百亿级Key存储方案(转)
1 需求背景 该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid)的mapping关系,还包括了supperi ...
- 数百个 HTML5 例子学习 HT 图形组件 – 3D建模篇
http://www.hightopo.com/demo/pipeline/index.html <数百个 HTML5 例子学习 HT 图形组件 – WebGL 3D 篇>里提到 HT 很 ...
- 数百个 HTML5 例子学习 HT 图形组件 – 3D 建模篇
http://www.hightopo.com/demo/pipeline/index.html <数百个 HTML5 例子学习 HT 图形组件 – WebGL 3D 篇>里提到 HT 很 ...
- 数百个 HTML5 例子学习 HT 图形组件 – WebGL 3D 篇
<数百个 HTML5 例子学习 HT 图形组件 – 拓扑图篇>一文让读者了解了 HT的 2D 拓扑图组件使用,本文将对 HT 的 3D 功能做个综合性的介绍,以便初学者可快速上手使用 HT ...
- 数百个 HTML5 例子学习 HT 图形组件 – 拓扑图篇
HT 是啥:Everything you need to create cutting-edge 2D and 3D visualization. 这口号是当年心目中的产品方向,接着就朝这个方向慢慢打 ...
- Mysql 如何批量插入百万行测试数据
Mysql 如何批量插入百万行测试数据
- linux 下载百度盘,迅雷离线文件,解压乱码文件的方法。
首先,利用bypy的自动打包功能,将百度盘里的文件自动存放至app/bypy中,这样文件就是打包形式. 再利用 axel -n 10 "下载地址",将文件下载至本地. 下载地址获取 ...
随机推荐
- 使用JS获取request参数
1.document.write('<%=request.getAttribute("param")%>'); 2.window.navigator.userAgent ...
- yii 在lnmp下访问问题
lnmp大坑 /usr/local/nginx/conf/fastcgi.conf 文件里面
- JAVA基础——Date和Calendar类
1计算某一月份的最大天数 Calendar time=Calendar.getInstance(); time.clear(); time.set(Calendar.YEAR,year); //yea ...
- mybatis传参总结
注:文章引用部分 mybatis传递参数总结文章内容 一.单个参数 1.基本数据类型 (1)直接使用 List<ChargeRuleDO> tests(long id); <sele ...
- uva-122 Trees on the level(树的遍历)
题目: 给出一棵树的表示,判断这棵树是否输入正确,如果正确就按层次遍历输出所有的结点,错误的话就输出not complete. 思路: 根据字符串中树的路径先将树建起来,在增加结点和层次遍历树的时候判 ...
- 微信小程序支付全问题解决
这几天在做小程序的支付,没有用官方的SDK,这里就纯用官方的文档搞一发. * 注作者使用的PHP,不过支付流程都是这样 开发前必读 主要流程 小程序前端发送求参请求 接受请求封装 "统一下单 ...
- Just a Hook (HDU 1698) 懒惰标记
Just a Hook (HDU 1698) 题链 每一次都将一个区间整体进行修改,需要用到懒惰标记,懒惰标记的核心在于在查询前才更新,比如将当前点rt标记为col[rt],那么此点的左孩子和右孩子标 ...
- JavaScript 面向对象的编程(一)
面向对象的JS var CheckObject = function(){ this.checkName = function(){ console.log('checkName'); } this. ...
- iOS攻城狮修炼之路
自己总结的学习iOS的笔记,打造一个全面的知识体系,iOS攻城狮修炼之路[持续更新中] iOS学习笔记01-APP相关 iOS学习笔记02-UIScrollView iOS学习笔记03-UITable ...
- Codeforces 303A(构造)
题意:对0到(n-1)这n个数进行全排列.请找出三个全排列a.b.c,使得“a与b的对应元素的和”与“c的对应元素”对模n同余,无解输出-1.(n<=1e5) 分析:n为奇数有解,n为偶数无解 ...