[CQOI2012]模拟工厂 题解(搜索+贪心)

[CQOI2012]模拟工厂 题解(搜索+贪心)

标签:题解
阅读体验:https://zybuluo.com/Junlier/note/1327574

链接题目地址:洛谷P3161 BZOJ P2667
这个题练一练综合思想还是不错的。。。(然而蒟蒻不会啊)

做法

肯定是在能完成某些订单的情况下使自己生产力越高越好是吧(一个大致的贪心方向)
但是我们不知道自己到底应该怎么去决定提高生产力时间
那么换个角度,不从时间来看,从订单上来看

贪心

我们假设一定要完成订单\(1~n\)
那么应该如何贪心选时间提升生产力呢,当然是在能满足所有订单的基础上尽量多地提高生产力
那么对于订单\(i\)\(j\),我们都会得到方程:(设\(pdc(produce)\)为完成订单\(i\)时的生产力,\(T\)为距离\(j\)订单的时间,\(x\)为用来提升生产力的时间,\(gv(give)\)是订单\(j\)需求量)
\[(pdc+x)×(T-x)=gv\]对所有我们一定要完成的订单一个一个完成,每次完成一个订单时对它之后的每一个订单我们都解这么一个方程,得到尽可能的休息时间,那么这样子一定是对的吧

然后可以想到

上面是\(1~n\)我们都想完成,现在不同了,我们可以放弃一些订单
再看数据范围:\(n<=15\)?,那不就暴力枚举状态选还是不选啊
然后对于上面那个方程,如果无解\(△ < 0\)肯定这种计划是不行的
然后直接用求根公式会得到:\[\frac{T-pdc+\sqrt{(pdc+T)^2-4×gv}}{2}\]算一下时间复杂度:\(O(2^n×n^2)\)很对呀,那就做完了
枚举状态虽可以直接枚举,但也可以搜是吧,那我们就叫他搜索了

给出代码

哼哼~压行是看代码人的噩梦,是写代码者的美梦(虽然笔者只稍稍压行了。。。

#include<bits/stdc++.h>
#define il inline
#define rg register
#define ldb double
#define lst long long
#define rgt register int
#define N 20
#define M 100050
using namespace std;
const int Inf=1e9;
il lst MAX(rg lst x,rg lst y){return x>y?x:y;}
il lst MIN(rg lst x,rg lst y){return x<y?x:y;}
il int read()
{int s=0,m=0;char ch=getchar();while(!isdigit(ch)){if(ch=='-')m=1;ch=getchar();}while( isdigit(ch))s=(s<<3)+(s<<1)+(ch^48),ch=getchar();return m?-s:s;
}int n,UP;
lst Ans,Res;
int sgn[N],top;
struct DD{lst tt,gv,gt;}ljl[N];
bool cmp(const int&a,const int&b){return ljl[a].tt<ljl[b].tt;}il void Solve(rgt Zt)
{top=Res=0;for(rgt i=1;i<=n;++i)if(Zt&(1<<(i-1)))sgn[++top]=i,Res+=ljl[i].gt;if(Res<Ans)return;sort(&sgn[1],&sgn[top+1],cmp);rg lst pdc=1,rest=0;rg bool flag=true;for(rgt i=0;i<top;++i){rg lst nd=0,brk=Inf;for(rgt j=i+1;j<=top;++j){nd+=ljl[sgn[j]].gv;rg lst tm=ljl[sgn[j]].tt-ljl[sgn[i]].tt;rg lst b=pdc-tm,c=nd-rest-pdc*tm;if(b*b-4*c<0){flag=false;break;}//deltarg lst x=(sqrt(b*b-4*c)-b)/2;brk=MIN(brk,x);}pdc+=brk;rest+=pdc*(ljl[sgn[i+1]].tt-ljl[sgn[i]].tt-brk)-ljl[sgn[i+1]].gv;if(!flag||brk<0||rest<0){flag=false;break;}}if(flag)Ans=MAX(Ans,Res);
}int main()
{n=read(),UP=(1<<n);for(rgt i=1;i<=n;++i)ljl[i]=(DD){read(),read(),read()};for(rgt i=1;i<UP;++i)Solve(i);return printf("%lld\n",Ans),0;
}

转载于:https://www.cnblogs.com/cjoierljl/p/9909018.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上传文件的input问题以及FormData特性

1.input中除了type"file"还要加上name"file"&#xff0c;否则$_FILES为空&#xff0c;input的name值就是为了区分每一个input的 2.var formdata new FormData($("#form")[0]); 或者var formdata new FormData(document.getElementById("f…

iphone手机备忘录迁移_如何在iPhone和iPad上使用语音备忘录

iphone手机备忘录迁移Whether you’re recording a voice message as a reminder of that million dollar idea or catching a snippet of a new song you know you’ll forget, the iPhone and iPad’s Voice Memos app is the perfect tool. 无论您是录制语音消息来提醒这一百…

php 执行文件tar打包,利用tar for windows对大量文件进行快速打包

近期将某些网站换服务器&#xff0c;由于网站数量巨大&#xff0c;加上附件和静态页&#xff0c;文件数量异常多&#xff0c;考虑先打包然后直接传过去。起初尝试用winrar打包&#xff0c;但是发现即使选择”仅储存”速度仍然慢到无法接受&#xff0c;后来想到了tar&#xff0c…

DDD~领域事件中使用分布式事务

对于一个聚合来说&#xff0c;它可能会被附加很多事件&#xff0c;这里我们叫它领域事务&#xff0c;因为一个聚会我们可以把它理解成一个领域&#xff0c;一个业务。对于领域事件不清楚的同学可以看看我的这篇文章《DDD~领域事件与事件总线》&#xff0c;里面有详细的说明&…

如何在PowerPoint中制作打字机或命令行动画

Adding quirky animations to your Microsoft PowerPoint presentation gives your slideshow a little extra life. Not only will adding a typewriter or command line animation entertain your audience, but it will also keep them focused on the text. 在您的Microsof…

oracle中spool卸数,数据卸载--spool的使用

&#xfeff;&#xfeff;引言在项目中&#xff0c;我们经常会遇到数据的卸载、装载需求。卸载就是需要将数据从数据库中导入到文本文件中的需求&#xff0c;这样的方法有很多&#xff0c;比较常用的就是spool命令。装载就是需要将数据从文本文件中导入到数据库中。方法也有很多…

Objective-C中的@property

1.property是什么 Property是声明属性的语法&#xff0c;它可以快速方便的为实例变量创建存取器&#xff0c;并允许我们通过点语法使用存取器。 存取器&#xff08;accessor&#xff09;&#xff1a;指用于获取和设置实例变量的方法。用于获取实例变量值的存取器是getter&#…

Linux基础命令---findfs

findfs 查找指定卷标或者UUID的文件系统对应的设备文件。findfs将搜索系统中的磁盘&#xff0c;寻找具有标签匹配标签或与UUID相等的文件系统。如果找到文件系统&#xff0c;文件系统的设备名称将打印在stdout上。 此命令的适用范围&#xff1a;RedHat、RHEL、Ubuntu、CentOS、…

canvas 平滑运动_什么是电视上的运动平滑?人们为什么讨厌它?

canvas 平滑运动Willy Barton/Shutterstock.com威利巴顿/Shutterstock.comIf you’ve just bought a new TV, you might be wondering why everything you watch feels eerily sped up and smooth, like you’re watching a live broadcast all the time. You’re not imaginin…

linux guard什么进程,使用linux系统性能监控工具KSysguard监控远端主机介绍

KDE System Guard默认的窗口前端图形界面使用传感器(sensors)获得要显示的信息。传感器返回的可以是一个简单的数值或更复杂的信息如表格。针对不同的信息类型都提供了一个或多个显示界面。这些显示界面被组织在多个工作表中&#xff0c;工作表可以独立存储和加载。KSysguard主…

macbook充电_如何判断MacBook是否正在充电

macbook充电2p2play / Shutterstock2p2play / ShutterstockForgetting to charge your MacBook properly overnight can leave you with a headache in the morning. And if you’re troubleshooting a broken MacBook, checking if it’s able to charge is one way to rule o…

mysql记录

当没有用EXISTS引入子查询时&#xff0c;在选择列表中只能指定一个表达式转载于:https://www.cnblogs.com/niuben/p/9920741.html

PIL.Image convert to numpy array

当使用PIL.Image读取图像时&#xff0c;如果直接使用numpy.array()转换会出现错误&#xff1a; lst list() for file_name in os.listdir(dir_image):image PIL.Image.open(file_name)lst.append(image) arr numpy.array(lst) 此时&#xff0c;上述最后一行在执行时会出现错…

NFC服务器在Linux,linux 安装 libnfc ,打开串口PN532

硬件准备&#xff1a;USB转串口4针杜邦线PN532模块IC卡一张(比如门禁卡&#xff0c;饭卡等)软件准备&#xff1a;Ubuntu 物理机一台能够访问互联网1&#xff0c;将PN532与USB转串口连接好,放一张IC卡靠近PN532模块2&#xff0c;安装libnfc&#xff1a;chunliubuntu:~$ sudo apt…

chrome同步_如何在Chrome中打开或关闭同步

chrome同步Google Chrome lets you sync up your Google account to your browser across any device. When enabled, bookmarks, history, passwords, extensions, and themes—among many other settings—sync from your Google account, creating a seamless experience no…

sublime text3搭建react native

Sublime Text 3 搭建React.js开发环境 Sublime有很强的自定义功能&#xff0c;插件库很庞大&#xff0c;针对新语言插件更新很快&#xff0c;配合使用可以快速搭建适配语言的开发环境。 1. babel-sublime 支持ES6&#xff0c; React.js, jsx代码高亮&#xff0c;对 JavaScript,…

linux系统输入指令,详解linux系统输入输出管理和vim的常用功能

####系统中输入输出的管理####1.理解系统的输入输出重定向输入重定向是指把文件导入到命令中&#xff0c;而输出重定向则是把原本要输出到屏幕的数据信息写入到指定文件中。2.管理输入输出的符号##输出重定向> ##重定向正确输2> ##重定向错误输出&> …

Deep Learning(深度学习)学习笔记整理(二)

本文整理了网上几位大牛的博客&#xff0c;详细地讲解了CNN的基础结构与核心思想&#xff0c;欢迎交流 [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之&#xff1a;CNN卷积神经网络推导和实现 [4]Deep Learning模型之&#xff1a;CNN的反向求导及练习 …

百度新闻 谷歌新闻_每日新闻摘要:到目前为止,Google I / O提供的最佳信息

百度新闻 谷歌新闻Google’s yearly developer conference started yesterday, and the keynote was chock-full of announcements, demos, and some utterly mind-blowing tech. From Assistant to Android, here’s some of the best stuff to come out of I/O 2019 so far. …

u盘装服务器linux软件,服务器维护给您的U盘安装linux

服务器维护给您的U盘安装linux如何做好服务器维护?北京艾锑无限科技与你谈谈IT人员必须知道的服务器维护信息服务器维护小知识因为现在linux普及率实在不高&#xff0c;很多地方都没有安装&#xff0c;包括高校机房。为了自身方便和宣传推广linux&#xff0c;决定在U盘上安装一…