BZOJ 2667 cqoi2012 模拟工厂 贪心
来源:互联网 发布:淘宝订单接口 编辑:程序博客网 时间:2024/06/17 05:39
题目大意:现在你有一个工厂,初始生产力为
1.将生产力提高1
2.生产一些产品,数量等于当前生产力的数值
现在你有
求最大收益
跪shanest大爷。。。
由于
每次Check的时候,对于每段时间显然先提高生产力再生产产品
那么我可以考虑这一段内先尽量提高生产力 但是这样可能会导致生产力提高得太高而没有足够的时间生产产品使得某个订单失败
因此我们计算出对于后面的每一个订单,最多花多少时间提高生产力可以满足如果用接下来的时间都生产的话不至于fail
由于产品数量是关于提高生产力次数的二次函数 因此解个方程就行了
#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 20using namespace std;struct abcd{ int tim,goods,money; friend istream& operator >> (istream &_,abcd &a) { return scanf("%d%d%d",&a.tim,&a.goods,&a.money),_; } bool operator < (const abcd &a) const { return tim < a.tim ; }}a[M],stack[M];int n,top;long long ans;int Calculate(long long k,long long t,long long g){ long long a=1,b=k-t,c=g-k*t; long long delta=b*b-4*a*c; if(delta<0) return -1; return (long long)(floor( (-b+sqrt(delta))/2/a +1e-7 )+1e-7);}bool Judge(){ int i,j; long long productivity=1,_goods=0; for(i=1;i<=top;i++) { long long sum=0; int _tim=stack[i].tim-stack[i-1].tim; for(j=i;j<=top;j++) { sum+=stack[j].goods; if(sum>_goods) _tim=min(_tim, Calculate(productivity,stack[j].tim-stack[i-1].tim,sum-_goods) ); } if(_tim<0) return false; productivity+=_tim; _goods+=productivity*(stack[i].tim-stack[i-1].tim-_tim); _goods-=stack[i].goods; } return true;}int main(){ int i,j; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); for(i=1;i<1<<n;i++) { long long _money=0; top=0; for(j=1;j<=n;j++) if(i&(1<<j-1)) stack[++top]=a[j],_money+=a[j].money; if( Judge() ) ans=max(ans,_money); } cout<<ans<<endl; return 0;}
0 0
- BZOJ 2667 cqoi2012 模拟工厂 贪心
- [贪心 二次函数] BZOJ 2667 [cqoi2012]模拟工厂
- BZOJ 2667: [cqoi2012]模拟工厂
- bzoj 2667 [cqoi2012]模拟工厂
- 2667: [cqoi2012]模拟工厂
- 2667: [cqoi2012]模拟工厂
- BZOJ 2666 cqoi2012 组装 贪心
- bzoj 2666: [cqoi2012]组装 贪心
- 【bzoj2666】【cqoi2012】【组装】【贪心】
- 【bzoj 2666】: [cqoi2012]组装
- 【模拟+贪心】bzoj 1029 麻将
- 【bzoj 2668】: [cqoi2012]交换棋子
- bzoj 2668: [cqoi2012]交换棋子
- BZOJ 4029: [HEOI2015]定价|贪心|模拟
- BZOJ 4029: [HEOI2015]定价 贪心,模拟
- BZOJ 3799 字符串重组 贪心模拟乱搞
- [CQOI2012]组装 (非贪心,数学解法)
- bzoj 2669: [cqoi2012]局部极小值
- Android自定义SwitchButton左右滑动开关按钮控件
- 排序算法小结
- Leetcode#5 Longest Palindromic Substring
- unity5实现数字矩阵效果实现
- 利用MAVEN打包时,如何包含更多的资源文件
- BZOJ 2667 cqoi2012 模拟工厂 贪心
- UIActivityIndictorView的使用
- 基于内容的图像检索引擎(以图搜图)
- 黑马程序员——3,JAVA基础(函数,数组相关)
- 什么是依赖注入
- 关于java Date和时区的问题
- Xcode升级后Alcatraz失效的解决方案
- [设计模式学习笔记]享元模式(FYLWEIGHT)
- JSON数据构造及解析详解