[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

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

  1. 2667: [cqoi2012]模拟工厂

    题目链接 很显然的贪心:在一段时间t里,如果你要选择x天进行提高产率,那么让产率最大化的方案显然是在t天里前x天进行提高产率,后面的时间进行生产. 如果当前有 v0 的生产能力,并且已经处理完了前 i ...

  2. 计蒜客2020蓝桥杯大学A组模拟赛题解

    计蒜客2020蓝桥杯大学A组模拟赛题解 蓝桥杯的话,去年拿了C++组的国二.今年报名了新成立的Python组,不知道能不能摸到国一的鱼 模拟赛链接如下: https://www.jisuanke.co ...

  3. 数据结构——马踏棋盘题解(贪心算法)

    本文转自: https://blog.csdn.net/qq_41596568/article/details/83060317 数据结构--马踏棋盘题解(贪心算法) 使用循环建立棋盘与权值棋盘(权值 ...

  4. 虚拟实验工场大学计算机报告,模拟工厂实习报告

    模拟工厂实习报告 (15页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 模拟工厂实习模拟工厂实习 实验报告实验报告实验步骤:实验步骤:一 ...

  5. 第一届『Citric杯』NOIP提高组模拟赛 题解

    [官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...

  6. 2021年 第十二届蓝桥杯第二期校内模拟赛题解(Java版)

    时隔多日,终于会写一些简单DP了哈哈哈! 稍微改版,方便阅读,若有错,请指出 2019年 第十届蓝桥杯省赛题解(JavaB组版) 2020年 第十一届蓝桥杯第一场省赛题解(JavaB组版) 2020年 ...

  7. 数据结构——马踏棋盘题解(贪心算法)(C语言)

    数据结构--马踏棋盘题解(贪心算法) 使用循环建立棋盘与权值棋盘(权值为该位置可走的位置数量) 将当前步数写入棋盘数组中 开始探测下一步该走的位置, 分别测试八个方向 对可走位置进行查询权值,将权值最 ...

  8. 2019CSP模拟赛题解Adore Confess Repulsed

    题解 第一次在考场上A掉状压DP... 由于答案要求路径条数为偶数的方案数,所以我们对于每个点只需要存下它对应路径条数的奇偶性 然后只有10个点,就可以状压DP f[i][S]表示到第i层DAG时每个 ...

  9. 【CodeForces - 545 ABCDE套题训练题解】贪心, 构造,模拟,dp,最短路树(Dijkstra+变形)

    A: 题干: Input The first line contains integer n (1 ≤ n ≤ 100) - the number of cars. Each of the next  ...

最新文章

  1. label实现不同大小不同颜色
  2. dwz框架中动态添加查找带回组件
  3. 不同层次程序员的比较:三流比设计,一流比方法,顶级比什么?
  4. android之menu,一起学Android之Menu
  5. electron 软件 出现进程 XXX 可能无法关闭 解决方法
  6. 解决macOS Big Sur升级后部分java应用无法打开的问题JavaVM: Failed to load JVM: libserver.dylib
  7. 应用统计学方差分析之单因素方差分析原理解析(含Python代码)
  8. python基础ppt_python基础知识(三)
  9. 二进制安装MySQL以及密码破解
  10. matalb读取txt文件以及将数据写入txt文件
  11. Layer Tree 绘制
  12. 【天嵌使用教程】嵌入式主板VS2008开发windows C#基本流程
  13. veket+linux+v7,veket linux安装工具
  14. 高德开放平台天气查询API
  15. python的内置字典数据类型_python 数据类型元组与字典内置方法
  16. 手机通过ESP8266(WiFi)控制stm32f103c8t6的洒水小车
  17. javaMail实现发邮件功能
  18. 为什么Flutter已成为2020年开发移动应用程序的最佳选择?
  19. 中国十大系统软件外包公司排名:互联网十大外包公司
  20. mysql 报错:Error Code: 1175. You are using safe update mode and you tried...

热门文章

  1. 学会阅读硬件的原理图、数据手册大全
  2. mysql 左连接 怎么走索引_mysql left join查询没走索引
  3. 2014 计算机网络 考研真题,2014计算机网络考研试题过关必练
  4. php数组取字段值,php如何获取二维数组指定的某个字段的值
  5. 并行和并发有什么区别?
  6. Qt 多重继承时 moc 编译出错
  7. x299服务器芯片组,18核心炸裂!X299主板全集:为它真拼了
  8. 开发插件:分享10个非常实用IDEA插件,值得看一看!
  9. MVC实现实现文件流打包成压缩包
  10. Http与WWW服务精解