codeforces425C
http://codeforces.com/contest/425/problem/C
题意:两数列a[],b[],进行若干轮操作,每次操作花费e,
将a的一个前缀和b的一个前缀(两前缀的最后一个数字必须相同)删除,并得到虚拟1元,
最后的一次操作是将剩下的a[],b[]全部清空,花费是之前把a[],b[]删除的总数字个数,使得虚拟ans元变为真实ans元。
sol:首先有个很明显得暴力,就是n2求lcs
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=; bool f=; char ch=' ';
while(!isdigit(ch)) {f|=(ch=='-'); ch=getchar();}
while(isdigit(ch)) {s=(s<<)+(s<<)+(ch^); ch=getchar();}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<) {putchar('-'); x=-x;}
if(x<) {putchar(x+''); return;}
write(x/); putchar((x%)+'');
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=;
int n,m,up,cost;
int a[N],b[N],dp[N][N];
int main()
{
freopen("codeforces425C_data.in","r",stdin);
int i,j;
R(n); R(m); R(up); R(cost);
for(i=;i<=n;i++) R(a[i]);
for(i=;i<=m;i++) R(b[i]);
for(i=;i<=n;i++)
{
for(j=;j<=m;j++)
{
dp[i][j]=;
if(i==j&&i==) continue;
if(i) dp[i][j]=dp[i-][j];
if(j) dp[i][j]=max(dp[i][j],dp[i][j-]);
if(a[i]==b[j])
{
dp[i][j]=max(dp[i][j],dp[i-][j-]+);
}
}
}
int ans=;
for(i=;i<=n;i++) for(j=;j<=m;j++) if(dp[i][j]*cost+i+j<=up) ans=max(ans,dp[i][j]);
Wl(ans);
return ;
}
bl
但是显然挂了,所以我就写了一个树状数组求lcs,然后告诉我相同数字多次出现。。。
考虑一种dp,dp[i,j]表示长度为i的公共子序列,a串匹配到j时b的最小位置
至于那个位置,万能的STL
/*
题意:两数列a[],b[],进行若干轮操作,每次操作花费e,
将a的一个前缀和b的一个前缀(两前缀的最后一个数字必须相同)删除,并得到虚拟1元,
最后的一次操作是将剩下的a[],b[]全部清空,花费是之前把a[],b[]删除的总数字个数,使得虚拟ans元变为真实ans元。
*/
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=; bool f=; char ch=' ';
while(!isdigit(ch)) {f|=(ch=='-'); ch=getchar();}
while(isdigit(ch)) {s=(s<<)+(s<<)+(ch^); ch=getchar();}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<) {putchar('-'); x=-x;}
if(x<) {putchar(x+''); return;}
write(x/); putchar((x%)+'');
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=,inf=0x3f3f3f3f;
int n,m,up,cost;
int a[N],b[N];
int dp[][N];//dp[i,j]表示长度为i的公共子序列,a串匹配到j时b的最小位置
vector<int>Pos[N];
#define PB push_back
int main()
{
freopen("codeforces425C_data.in","r",stdin);
int i,j,ans=;
R(n); R(m); R(up); R(cost);
for(i=;i<=n;i++) R(a[i]);
for(i=;i<=m;i++)
{
R(b[i]); Pos[b[i]].PB(i);
}
for(i=;i<=n;i++) Pos[a[i]].PB(inf);
for(i=;i<=up/cost;i++)
{
dp[i][]=inf;
for(j=;j<=n;j++)
{
dp[i][j]=min(inf,dp[i][j-]);
int oo=lower_bound(Pos[a[j]].begin(),Pos[a[j]].end(),min(dp[i-][j-]+,inf))-Pos[a[j]].begin();
if(oo>m) continue;
dp[i][j]=min(dp[i][j],Pos[a[j]][oo]);
if(i*cost+dp[i][j]+j<=up) ans=i;
}
}
Wl(ans);
return ;
}
codeforces425C的更多相关文章
随机推荐
- MQ与logstash实现ES与数据库同步区别
Logstash 实现ES 与数据库同步: 使用定时器(使用sql 定时的去查询数据进行同步).实现方式比较简单. MQ 实现 ES 与数据库同步: 实时性,消息放到MQ中,消费者会自动的消费,复杂性 ...
- jmeter命令行执行脚本_动态参数设置
从04月换公司开始,就没静下来心来学习,其中发生了比较多的事情吧,不过不管如何,没坚持学习还是因为懒.本周交接完,下周去入职新公司,该静下心来学点什么了. ---------------------- ...
- springcloud源码解析(目录)
springcloud是一个基于springboot的一站式企业级分布式应用开发框架.springboot为其提供了创建单一项目的便利性,springcloud组合了现有的.常用的分布式项目的解决方案 ...
- Pandas-高级部分及其实验
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/11014893.html jupyter代码原文 ...
- Python排序算法(六)——归并排序(MERGE-SORT)
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10800699.html 一.归并排序(MERG ...
- CoAP协议
CoAP(Constrained Application Protocol) CoAP是6LowPAN协议栈中的应用层协议 CoAP是超轻量型协议 CoAP的默认UDP端口号为5683 1. 四种消息 ...
- DBCP连接池原理分析(转载)
DBCP连接池介绍 ----------------------------- 目前 DBCP 有两个版本分别是 1.3 和 1.4. DBCP 1.3 版本需要运行于 JDK 1.4-1.5 ,支持 ...
- 安装配置nginx之后访问不了nginx的问题
我刚开通的服务器,没有设置安全组规则. 进入云服务控制台 配置规则 其他不要动,授权对象加0.0.0.0/0 就可以访问nginx了
- UltraISO 软碟通注册(亲测!!!)
声明:本文仅限学习者共享使用,请勿用来商业行为,否则后果自负!!! 强烈建议!!!支持正版购买通道,请走这里. 免费下载UltralSO软碟通 首先当然是下载安装UltraISO软件,不然怎么** ...
- 解决服务器openssh漏洞
解决服务器openssh漏洞 发表于 2019 年 11 月 27 日 1. 检查升级 下载7.4p1 ,链接如下 http://www.openssh.com/portable.html 2.安 ...