Description

巨酱和主席是一对好朋友。他们都很喜欢读书,经常一起阅读相关领域书籍,进行系统的学习。一天主席列出了一份列表,里面共 p 本书,其中不乏《约翰克里斯多夫》,《名人传》等名著。作为一名在文学上有很高修养的知名青年,巨酱打算用尽量少的时间把这份列表中的所有书籍都读完。
作为一名文化人,巨酱阅读书籍的方式也与一般人不同。他使用一种叫做“批量阅读”的阅读方式。首先他根据自己的喜好,对每本书给出了个参数 x,y,其中 i 本书的两个参数为 xi,yi。当然,由于巨酱独特的口味,可能有两本不同的书,它们的 x、y 参数均相同。而每次阅读的时候,他会设置三个系数 a, b, c,所有满足 ax+by≤c 的书籍都可以通过这次“批量阅读”读完,这次批量阅读总共需要 w 的时间。
现在,巨酱有 n 种 “批量阅读”的方案,第 i 种“批量阅读”三个参数为 ai,bi,ci,需要的时间为 wi。现在巨酱打算从这 n 种“批量阅读”中选出若干,使得巨酱可以用尽量少的时间读完所有的书。现在我们想知道,巨酱最少用多少时间?

Input

第一行两个正整数 n,p,分别表示“批量阅读”的方案数以及书的数量。
接下来 n 行,每行四个整数,其中第 i 行包含四个整数 ai,bi,ci,wi,表示第 i 种“批量阅读”的方案。
接下来 p 行,每行两个整数,其中第 i 行包含两个整数 xi,yi,表示第 i 本书的参数。

Output

一行一个整数,表示最少需要的时间。若无论如何也无法读完全部书籍,则输出 −1。

每本书看作平面上一点,每个方案则为一个半平面,转化为求最小权值和的 半平面并 覆盖所有点。

首先可以特判掉一个半平面覆盖所有点的情况,其余情况的解至少有两个半平面,那么可以枚举其中的两个半平面,以半平面的交点为中心对其余未被覆盖的点进行极角排序

可以发现存在一种划分贡献的方式,使排序后的点被划分为几个连续段,每段被解中的某个半平面覆盖,于是可以区间dp,总复杂度是O(n4)

在判定点在半平面内时,计算结果在1012内,且计算结果和原数值都为整数,用double可以精确表示和计算

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
const int inf=0x3f3f3f3f;
int n,m;
struct hp{
double a,b,c;int v;
void read(){scanf("%lf%lf%lf%d",&a,&b,&c,&v);}
}h[];
struct pos{
double x,y;
void read(){scanf("%lf%lf",&x,&y);}
bool in(hp w){return x*w.a+y*w.b<=w.c;}
pos operator-(pos w){return (pos){x-w.x,y-w.y};}
double operator*(pos w){return x*w.y-y*w.x;}
}p[],s[];
pos p0;
bool operator<(pos a,pos b){
return (a-p0)*(b-p0)<;
}
pos cross(hp x,hp y){
double v=x.a*y.b-y.a*x.b;
return (pos){(x.c*y.b-y.c*x.b)/v,(x.c*y.a-y.c*x.a)/-v};
}
int f[],g[][],sp=,ans=inf;
void mins(int&a,int b){if(a>b)a=b;}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)h[i].read();
for(int i=;i<=m;++i)p[i].read();
for(int i=;i<=n;++i){
for(int j=;j<=m;++j)if(!p[j].in(h[i]))goto o;
mins(ans,h[i].v);o:;
}
for(int i=;i<=n;++i){
for(int j=;j<i;++j){
sp=;
p0=cross(h[i],h[j]);
for(int k=;k<=m;++k)if(!(p[k].in(h[i])||p[k].in(h[j])))s[++sp]=p[k];
std::sort(s+,s+sp+);
memset(f,0x3f,sizeof f);
memset(g,0x3f,sizeof g);
for(int a=;a<=n;++a)if(a!=i&&a!=j){
for(int l=,r;l<=sp;++l){
if(!s[l].in(h[a]))continue;
for(r=l;r<sp&&s[r+].in(h[a]);++r);
mins(g[l][r],h[a].v);
l=r+;
}
}
for(int d=sp;d>;--d)for(int l=,r=d;r<=sp;++l,++r)mins(g[l][r-],g[l][r]),mins(g[l+][r],g[l][r]);
f[]=;
for(int b=;b<=sp;++b)for(int a=;a<b;++a)mins(f[b],f[a]+g[a+][b]);
mins(ans,f[sp]+h[i].v+h[j].v);
}
}
printf("%d",ans==inf?-:ans);
return ;
}

bzoj3822: 文学的更多相关文章

  1. (转)一文学会用 Tensorflow 搭建神经网络

    一文学会用 Tensorflow 搭建神经网络 本文转自:http://www.jianshu.com/p/e112012a4b2d 字数2259 阅读3168 评论8 喜欢11 cs224d-Day ...

  2. 腾讯文学动作密集 疑为手Q发力移动阅读铺路

        移动互联网的门票之争并未结束,百度收购91无线,阿里投资新浪微博.UC浏览器,网易推易信.云音乐等等,都是互联网巨头争夺移动互联网门票的最佳案例.不过,上述任何巨头都不可忽视腾讯这个“狠角色” ...

  3. 移动收入超PC端 盛大文学战略转型初见成效

    随着智能手机和平板电脑的普及,越来越多的互联网服务也开始向移动端拓展,除了传统的互联网服务如搜索.即时通信之外,网络文学这项新兴的互联网业务也没忽视对移动端的布局. 7月9日,中国最大的网络文学出版平 ...

  4. 青年之锋文学网(&nbsp;www.xcqnzf…

    青年之锋文学网( www.xcqnzf.com )简介: 青年之锋文学网创建于2013年秋,是河南农业大学(应用科技学院)--青年之锋文学社的官方网站,网站以长篇写作和出版校刊为主题,短篇精彩丰富为中 ...

  5. 一文学会用 Tensorflow 搭建神经网络

    http://www.jianshu.com/p/e112012a4b2d 本文是学习这个视频课程系列的笔记,课程链接是 youtube 上的,讲的很好,浅显易懂,入门首选, 而且在github有代码 ...

  6. 一文学会最常见的10种NLP处理技术

    一文学会最常见的10种NLP处理技术(附资源&代码)   技术小能手 2017-11-21 11:08:29 浏览2562 评论0 算法 HTTPS 序列 自然语言处理 神经网络 摘要: 自然 ...

  7. 网络文学带动的IP热

    网络文学从最初被人诟病不入流到现今直接带动整个网络文学产业链发展以及IP热,其发展历程如何?现今布局如何?以下做简单概括. 下图为艾瑞PC指数文学网站排名,由图可看出晋江原创网排名首位. 晋江隶属盛大 ...

  8. pyhton项目和晋江文学城数据分析项目

     1.图书管理系统 图1.图书管理系统(作者信息列表页面) 图2.图书管理系统(作者信息修改页面) 2.个人博客网页设计 图3.博客(我的日记-->个人日记)页面 图4.博客(关于我--> ...

  9. [文学阅读] METEOR: An Automatic Metric for MT Evaluation with Improved Correlation with Human Judgments

    METEOR: An Automatic Metric for MT Evaluation with Improved Correlation with Human Judgments Satanje ...

随机推荐

  1. CentOS 下 rpm包与 yum 安装与卸载

    rpm包的安装:      1.安装一个包 # rpm -ivh 2.升级一个包 # rpm -Uvh 3.移走一个包 # rpm -e 4.安装参数 --force 即使覆盖属于其它包的文件也强迫安 ...

  2. WCF初探-7:WCF服务配置工具使用

    在上一篇WCF服务配置中,文章讲解了WCF的配置所需要的基本节点和属性构造,但是对于初学者的我们在编写程序的时候,往往对这些节点的位置和属性不是特别清楚,所以就导致我们的因配置文件错误而不能运行服务程 ...

  3. Regsvr32.exe 用法

    RegSvr32.exe 具有以下命令行选项:  Regsvr32 [/u] [/n] [/i[:cmdline]] dllname /u - 取消注册服务器 /i - 调用 DllInstall,为 ...

  4. hadoop运行原理之Job运行(二) Job提交及初始化

    本篇主要介绍Job从客户端提交到JobTracker及其被初始化的过程. 以WordCount为例,以前的程序都是通过JobClient.runJob()方法来提交Job,但是现在大多用Job.wai ...

  5. Java 获取网络重定向文件的真实URL

    其实Java 使用HttpURLConnection下载的的时候,会自动下载重定向后的文件,但是我们无法获知目标文件的真实文件名,文件类型,用下面的方法可以得到真实的URL,下面是一个YOUKU视频的 ...

  6. HTTP 304

    304 的标准解释是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档).服务器告诉客户,原来缓冲的 ...

  7. vs2013 遇到的web性能记录器无法使用问题

    诊断和修复Web测试记录栏的问题.自2005年以来VSTS运也出现了各种由客户多年来提出不同的问题.记录Web测试时,这在一定程度经常提到的一个话题是一个残疾或不存在的Web测试记录吧.因为它可以令人 ...

  8. ASP.NET——生成验证码

    实现:随机生成四位数字的验证码,点击验证码可无刷新生成新的验证码,最后点击按钮进行检验 PS:本实例使用UpdatePanel实现无刷新. 前台代码: <asp:ScriptManager ID ...

  9. 个人开发者做一款Android App需要知道的事情

    个人开发者做一款Android App需要知道的事情 在大学时, 自己是学计算机专业的,而且还和老师一起做过一年半的项目. 有时候是不是有这样的想法,做一个自己的网站.但一直未付诸行动.2012年时, ...

  10. C++ Daily 《1》----关于对象

    1. 问题 请问如下的一个 class 的一个对象占了多少内存? 具体包含哪些东西? non-static 变量? static member 变量? member function?? virtua ...