欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - BZOJ1071


题意概括

  有两个序列a[1..n], b[1..n],其编号为1..n,设为s序列。现在我们要求出最长的满足条件的s的子序列s',设va=min(a[s[i]]), vb=min(b[s[i]]), 满足对于所有的j=s'[i], A*(a[j]-va)+B*(b[j]-vb)<=C。


题解

  设v[i]=A*a[i]+B*b[i];
  那么,要求满足v[s'[i]]-A*va-B*vb<=C,
  移项得:v[s[i]]<=A*va+B*vb+C
  于是我们可以按照两种顺序排序,一个是v,一个是b。
  那么如果确定鼓励va,则:
  A*a[i]+B*b[i]<=A*va+B*vb+C
  而A*a[i]>=A*va
  所以B*b[i]<=B*vb+C
  移项B*(b[i]-vb)<=C,
  b[i]<=vb+C/B,
  都是整数,所以可以直接取整。
  所以,对于所有的b[i],有vb<=b[i]<=vb+C/B。
  然后双指针,一个扫按照b排序的,一个扫按照s排序的。


代码

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef long long LL;
const int N=5000+5;
struct Player{
LL a,b,v;
}v[N],a[N];
int n;
LL A,B,C;
bool cmp_v(Player a,Player b){
return a.v<b.v;
}
bool cmp_a(Player a,Player b){
return a.a<b.a;
}
int main(){
scanf("%d%lld%lld%lld",&n,&A,&B,&C);
for (int i=1;i<=n;i++){
scanf("%lld%lld",&v[i].a,&v[i].b);
v[i].v=A*v[i].a+B*v[i].b;
a[i]=v[i];
}
sort(v+1,v+n+1,cmp_v);
sort(a+1,a+n+1,cmp_a);
int ans=0;
for (int i=1;i<=n;i++){
int L=0,R=0,cnt=0;
LL xL=a[i].b,xR=xL+C/B;
LL va,vb=xL;
for (int j=1;j<=n;j++){
va=a[j].a;
while (R<n&&v[R+1].v<=A*va+B*vb+C){
R++;
if (xL<=v[R].b&&v[R].b<=xR)
cnt++;
}
while (L<n&&a[L+1].a<va){
L++;
if (xL<=a[L].b&&a[L].b<=xR)
cnt--;
}
ans=max(ans,cnt);
}
}
printf("%d",ans);
return 0;
}

  

BZOJ1071 [SCOI2007]压缩 其他的更多相关文章

  1. BZOJ1068: [SCOI2007]压缩

    ... 1068: [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 909  Solved: 566[Submit][Statu ...

  2. bzoj 1068: [SCOI2007]压缩 DP

    1068: [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 496  Solved: 315[Submit][Status] D ...

  3. bzoj 1068 [SCOI2007]压缩 区间dp

    [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1644  Solved: 1042[Submit][Status][Discu ...

  4. [SCOI2007]压缩(动态规划,区间dp,字符串哈希)

    [SCOI2007]压缩 状态:设\(dp[i][j]\)表示前i个字符,最后一个\(M\)放置在\(j\)位置之后的最短字串长度. 转移有三类,用刷表法来实现. 第一种是直接往压缩串后面填字符,这样 ...

  5. BZOJ 1068: [SCOI2007]压缩

    Sol 区间DP.这个区间DP需要三维, \(f[i][j][k]\) 表示\([i,j]\) 这个区间中是否存在 \(M\) . 转移有两种,一种是这个区间存在 \(M\) ,那么直接枚举 \(M\ ...

  6. 【BZOJ 1068】[SCOI2007]压缩

    Description 给 一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息.压缩后的字符串除了小写字母外还可以(但不必)包含大写字母R与M,其中M 标记重复串的开始,R重复从 ...

  7. 1068: [SCOI2007]压缩 - BZOJ

    Description 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息.压缩后的字符串除了小写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一 ...

  8. bzoj1068:[SCOI2007]压缩

    思路:区间dp,设状态f[l][r][bo]表示区间[l,r]的答案,bo=1表示该区间可以放M也可以不放M,bo=0表示该区间不能放M,并且对于任意一个状态f,l和l-1之间均有一个M,于是就可以进 ...

  9. [BZOJ 1068] [SCOI2007] 压缩 【记忆化搜索】

    题目链接:BZOJ - 1068 题目分析 这种记忆化搜索(区间 DP) 之前就做过类似的,也是字符串压缩问题,不过这道题稍微复杂一些. 需要注意如果某一段是 S1S1 重复,那么可以变成 M + S ...

随机推荐

  1. 二、Internet地址结构

    IP路由器实现的转发程序使用IP地址来识别流量去向.IP地址也表示流量来源. 2.1 IP地址的表示 IPV4地址通常采用点分四组或点分十进制表示法,如192.168.1.1. 点分四组表示法由四个用 ...

  2. 第5月第7天 php slim

    1. <?php require 'Slim/Slim.php'; require 'DBManagement.php'; \Slim\Slim::registerAutoloader(); $ ...

  3. 卷积神经网络(CNN)学习笔记1:基础入门

    卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01   |   In Machine Learning  |   9 Comments  |   14935  Vie ...

  4. Database学习 - mysql 数据库 索引

    索引 索引在mysql 中也叫 '键',是存储引擎用来快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要. 索引优化应该是对查询性能优化 ...

  5. 当WebView运行在特权进程时抛出安全异常,Hook方式解决方案(包含对Android 8.0的处理)

    1.问题起源报错语句是:java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in ...

  6. AutoML相关论文

    本文为Awesome-AutoML-Papers的译文. 1.AutoML简介 Machine Learning几年来取得的不少可观的成绩,越来越多的学科都依赖于它.然而,这些成果都很大程度上取决于人 ...

  7. mysql中把一个表的数据批量导入另一个表中

    mysql中把一个表的数据批量导入另一个表中   不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL或MS SQLServer某个表的数据批量导入到另一个表的情况,甚至有时还需要指定 ...

  8. 【tomcat】Web环境(tomcat)下新增一个访问路径(虚拟路径)

    在tomcat上配置图片虚拟目录,在tomcat下conf/server.xml中添加:(在server.xml最好不要添加中文注释,在有些操作系统会启动失败) <Context docBase ...

  9. Freemarker导出带多个不重复图片的word

    1.新建一个word,添加一张图片,调整好图片大小与位置.

  10. ROS中的CMakeLists.txt

    在ROS的编程过程中,如果CMakeLists.txt如果写不好,编译就很难成功.如果看不懂CMakeLists.txt那么很多错误你也不知道时什么回事.所以深入了解它是很有必要的.现在我们就来看看它 ...