传送门

解题思路

贪心,首先因为\(n\)比较小,可以\(2^n\)枚举子集。然后判断的时候就每次看后面的如果用最大生产力生产能不能达成目标,解一个二次函数。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define int long long using namespace std;
const int MAXN = 25;
typedef long long LL; inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?0:1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return f?x:-x;
} int n,t[MAXN],g[MAXN],m[MAXN],cnt,mk[MAXN],ans;
int tmp[MAXN]; inline bool cmp(int x,int y){
return t[x]<t[y];
} int calc(int a,int b,int c){
double delta=b*b-4*a*c;
if(delta<0) return -1;
return floor((-b+sqrt(delta))/(a*2));
} inline bool check(){
for(int i=1;i<=cnt;i++) tmp[i]=mk[i];
sort(tmp+1,tmp+1+cnt,cmp);
int tt,now=1;LL sum=0,res=0;
for(int i=1;i<=cnt;i++){
sum=0;tt=t[tmp[i]]-t[tmp[i-1]];
for(int j=i;j<=cnt;j++){
sum+=g[tmp[j]];
if(sum>res)
tt=min(tt,calc(1,now-t[tmp[j]]+t[tmp[i-1]],
sum-res-now*(t[tmp[j]]-t[tmp[i-1]])));
}
if(tt<0) return false;
now+=tt;res+=(now*(t[tmp[i]]-t[tmp[i-1]]-tt)-g[tmp[i]]);
}
return true;
} void dfs(int x,LL sum){
if(x==n+1) {if(sum>ans) if(check()) ans=sum;return;}
mk[++cnt]=x;dfs(x+1,sum+m[x]);
cnt--;dfs(x+1,sum);
} signed main(){
// freopen("data.txt","r",stdin);
// freopen("B.txt","w",stdout);
n=rd();
for(int i=1;i<=n;i++) t[i]=rd(),g[i]=rd(),m[i]=rd();
dfs(1,0);cout<<ans;
return 0;
}

LUOGU P3161 [CQOI2012]模拟工厂 (贪心)的更多相关文章

  1. [BZOJ2667][cqoi2012]模拟工厂 贪心

    2667: [cqoi2012]模拟工厂 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 367  Solved: 184[Submit][Status] ...

  2. P3161 [CQOI2012]模拟工厂

    传送门 先枚举选择哪些订单,然后转为判定是否可行 在能完成的情况下肯定是花越多时间提高生产力越优 我们设可以有\(x\)单位时间来提高生产力,那么如果当前离下一个订单的时间为\(T\)时,这个订单要\ ...

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

    [CQOI2012]模拟工厂 题解(搜索+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327574 链接题目地址:洛谷P3161 BZOJ P26 ...

  4. [BZOJ2667][cqoi2012]模拟工厂

    [BZOJ2667][cqoi2012]模拟工厂 试题描述 有一个称为“模拟工厂”的游戏是这样的:在时刻0,工厂的生产力等于1.在每个时刻,你可以提高生产力或者生产商品.如果选择提高生产力,在下一个时 ...

  5. 洛谷 题解 P3161 【[CQOI2012]模拟工厂】

    本蒟蒻又双叒叕被爆踩辣! 题目链接 Solution: 这题又是一道贪心.. 数据范围: n<=15 ti<=100,000 gi<=10^9 mi<=10^9 这里就可以看到 ...

  6. [BZOJ2667][cqoi2012][kcoj]模拟工厂

    题目描述 Description 有一个称为“模拟工厂”的游戏是这样的:在时刻0,工厂的生产力等于1.在每个时刻,你可以提高生产力或者生产商品.如果选择提高生产力,在下一个时刻时工厂的生产力加1:如果 ...

  7. Luogu 1090 合并果子(贪心,优先队列,STL运用)

    Luogu 1090 合并果子(贪心,优先队列,STL运用) Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每 ...

  8. Luogu 1970 NOIP2013 花匠 (贪心)

    Luogu 1970 NOIP2013 花匠 (贪心) Description 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使 ...

  9. luogu P5470 [NOI2019]序列 dp 贪心 费用流 模拟费用流

    LINK:序列 考虑前20分 容易想到爆搜. 考虑dp 容易设\(f_{i,j,k,l}\)表示前i个位置 选了j对 且此时A选择了k个 B选择了l个的最大值.期望得分28. code //#incl ...

随机推荐

  1. pycharm破解教程

    转载 查询 https://blog.csdn.net/u014044812/article/details/86679150

  2. 多台服务器-SSH免密登录设置

    在4台服务器-SSH免密登录设置,如以下4台服务器 master1 node001 node002 node003 我想在master1对4台服务器进行拉取或者分发任务或者是集群服务器的批量操作,但是 ...

  3. C#/.NET 实现的多屏联动,多屏共享,显示到指定屏幕上

    假设我现在有4个屏幕,希望实现主屏幕在操作的时候,其他3块屏幕可以实时联动,并且延迟在1s以内. 正常情况下,我们可以借助于各个远程软件实现效果,但是有时候会显得笨重麻烦,假如只有一台服务器呢?? S ...

  4. vue组件间函数调用

    vue父子组件间函数调用 <Child ref="myChild"></Child> // 父组件 // 引入子组件 import Child from ' ...

  5. NOIp2018集训test-9-7(pm) (联考一day1)

    又被辉神吊打了.今天不仅被辉神李巨吊打,还给基本上给全班垫底了. 看到T3就知道是十进制快速幂,全机房考试的当时应该就我会,结果我tm没找到递推. Orz lyc BM直接水过,Orz wys六个fo ...

  6. NX二次开发-UFUN获取系统相关信息UF_ask_system_info

    NX9+VS2012 #include <uf.h> UF_initialize(); UF_system_info_t Info; UF_ask_system_info(&Inf ...

  7. NX二次开发-输入X向量Y向量输出一个3*3矩阵UF_MTX3_initialize

    NX9+VS2012 #include <uf.h> #include <uf_csys.h> #include <uf_mtx.h> UF_initialize( ...

  8. [NOI.AC] count

    思路: 考虑组合数学. 当所求中没有重复的时候,方案数就是\(C_{n + 1}^{k}\) 当有重复的时候... 设相等的数字之间的距离为\(len\) 当取0个数时,方案数就是\(C_{n - 1 ...

  9. document.body / document.ducumentElement /等获取高度和宽度的区别

    document.body / document.ducumentElement /等获取高度和宽度的区别 <!DOCTYPE html> <html> <head la ...

  10. 2018-06-05(thinking in java)

    1:类只能有2种访问权限,一种是不写访问权限:默认包访问权限,另一种是public.且类只能有一个pubic 2:方法有4种访问权限,pubic(都可以访问),protexted(继承访问权限),pr ...