P2877 [USACO07JAN]牛校Cow School

01分数规划是啥(转)

决策单调性分治,可以解决(不限于)一些你知道要用斜率优化却不会写的问题

怎么证明?可以暴力打表

我们用$ask(l,r,dl,dr)$表示处理区间$[l,r]$时,这段区间的决策点已固定在$[dl,dr]$中

设$mid=(l+r)/2$,暴力处理$mid$的最优决策点$dm$

再向下分治$ask(l,mid-1,dl,dm)$,$ask(mid+1,r,dm,dr)$

对于本题,先按$t[i]/p[i]$从大到小排序,排序后的默认方案(删掉后D个)即为

取区间$[1,n-D]$,舍去区间$[n-D+1,D]$

怎么判断默认方案是否最优呢

根据01分数规划的基本套路(大雾)

设$r=st[i]/sp[i]$($st[i],sp[i]$为排序后$t,p$的前缀和)

在$[1,n-D]$中找到$A=min{t[i]-r*p[i]}$

在$[n-D+1,n]$中找到$B=max{t[i]-r*p[i]}$

如果$A<B$,那么交换A,B可以使答案更优,即默认方案不是最佳方案

于是就可以分治处理辣

复杂度$O(nlogn)$

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
#define N 50005
struct data{ll t,p;}a[N];
int n,ans; ll f[N],g[N],st[N],sp[N];
inline bool cmp(data A,data B){return A.t*B.p>A.p*B.t;}
void getf(int l,int r,int dl,int dr){
int mid=(l+r)>>,dm;
f[mid]=1e16;
for(int i=dl;i<=min(mid,dr);++i){
ll tt=sp[mid]*a[i].t-st[mid]*a[i].p;
if(tt<f[mid]) f[mid]=tt,dm=i;
}
if(l<mid) getf(l,mid-,dl,dm);
if(r>mid) getf(mid+,r,dm,dr);
}
void getg(int l,int r,int dl,int dr){
int mid=(l+r)>>,dm;
g[mid]=-1e16;
for(int i=dr;i>=max(mid+,dl);--i){
ll tt=sp[mid]*a[i].t-st[mid]*a[i].p;
if(tt>g[mid]) g[mid]=tt,dm=i;
}
if(l<mid) getg(l,mid-,dl,dm);
if(r>mid) getg(mid+,r,dm,dr);
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;++i) scanf("%lld%lld",&a[i].t,&a[i].p);
sort(a+,a+n+,cmp);
for(int i=;i<=n;++i) st[i]=a[i].t+st[i-],sp[i]=a[i].p+sp[i-];
getf(,n-,,n); getg(,n-,,n);
for(int i=;i<n;++i) if(f[i]<g[i]) ++ans;
printf("%d\n",ans);
for(int i=n-;i;--i) if(f[i]<g[i]) printf("%d\n",n-i);
return ;
}

P2877 [USACO07JAN]牛校Cow School(01分数规划+决策单调性分治)的更多相关文章

  1. P2877 [USACO07JAN]牛校Cow School

    传送门 $01$规划 $01$规划优质讲解:传送门 考虑先将每一科按 $t/p$ 从小到大排序,枚举每一个 $D$(删除的考试数量) 显然一开始的成绩是 $\frac{\sum_{i=d+1}^nt[ ...

  2. 牛客多校5 A-gpa(01分数规划)

    gpa 链接:https://www.nowcoder.com/acm/contest/143/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言 ...

  3. 2018年东北农业大学春季校赛 I wyh的物品【01分数规划/二分】

    链接:https://www.nowcoder.com/acm/contest/93/I来源:牛客网 题目描述 wyh学长现在手里有n个物品,这n个物品的重量和价值都告诉你,然后现在让你从中选取k个, ...

  4. POJ3621Sightseeing Cows[01分数规划 spfa(dfs)负环 ]

    Sightseeing Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9703   Accepted: 3299 ...

  5. 【转】[Algorithm]01分数规划

    因为搜索关于CFRound277.5E题的题解时发现了这篇文章,很多地方都有值得借鉴的东西,因此转了过来 原文:http://www.cnblogs.com/perseawe/archive/2012 ...

  6. BZOJ5281: [Usaco2018 Open]Talent Show 01分数规划+01背包

    Description FarmerJohn要带着他的N头奶牛,方便起见编号为1…N,到农业展览会上去,参加每年的达牛秀!他的第i头奶牛重 量为wi,才艺水平为ti,两者都是整数.在到达时,Farme ...

  7. BZOJ5281: [Usaco2018 Open]Talent Show(01分数规划&DP)

    5281: [Usaco2018 Open]Talent Show Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 166  Solved: 124[S ...

  8. POJ 3621 Sightseeing Cows 【01分数规划+spfa判正环】

    题目链接:http://poj.org/problem?id=3621 Sightseeing Cows Time Limit: 1000MS   Memory Limit: 65536K Total ...

  9. BZOJ2285 [SDOI2011]保密 【01分数规划 + 网络流】

    题目 现在,保密成为一个很重要也很困难的问题.如果没有做好,后果是严重的.比如,有个人没有自己去修电脑,又没有拆硬盘,后来的事大家都知道了. 当然,对保密最需求的当然是军方,其次才是像那个人.为了应付 ...

随机推荐

  1. go关键字之type用法

    1.定义结构体 type Student struct {     name string code int }       2.类型别名 type i int64 var age i = 30   ...

  2. 深度解剖session运行原理

    已经大半年没有更新博客了,一方面有比博客更重要的事情要做,另外一方面也没有时间来整理知识,所以希望在接下来的日子里面能够多多的写博客来与大家交流 什么是session session的官方定义是:Se ...

  3. 从0移植uboot(三) _编译最小可用uboot

    前两篇介绍了uboot-2013.01的配置原理以及大体的运行流程,本文将讨论如何对uboot源码进行配置,将一个可用的uboot烧录到SD卡中. 定制自己的core board 市面上能买到的开发板 ...

  4. 【奇淫技巧】API接口字段table文档转代码工具

    今天做一个视频接口对接,发现对方提供的文档没有json格式,无法自动生成请求和响应对象 json自动生成C#类的工具 http://tool.sufeinet.com/Creater/JsonClas ...

  5. Namespace declaration statement has to be the very first statement in the script-去除bom头

    今天准备测试小程序的签名加密,但是刚引入官方的“加密数据解密算法”文件到项目里,然后为每个文件添加命名空间的时候,不管怎么加都报“Namespace declaration statement has ...

  6. 微信小程序文字超出加省略号

    我查资料的时候搜到这个博客 http://blog.csdn.net/u010168409/article/details/54429678 view{ overflow:hidden; //超出一行 ...

  7. 补充:javascript

    写法分类:1.行内(内联)写在标签里面,以属性的形式表现,属性名是事件属性名例如:<button onClick="js代码"></button>2.内嵌写 ...

  8. 构建一个可以统计 qps 的nginx服务的Dockerfile

    github 项目地址: https://github.com/SilentCC/nginx_lua_qps_count nginx 是经常会用到的web 服务器,它有出色的并发性能,因此尝尝被用来当 ...

  9. 泡泡一分钟:Cubic Range Error Model for Stereo Vision with Illuminators

    Cubic Range Error Model for Stereo Vision with Illuminators 带有照明器的双目视觉的三次范围误差模型 "链接:https://pan ...

  10. ES6 数组方法拓展

    ES6 数组方法拓展 1.Array.from() Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括E ...