LUOGU P3161 [CQOI2012]模拟工厂 (贪心)
解题思路
贪心,首先因为\(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]模拟工厂 (贪心)的更多相关文章
- [BZOJ2667][cqoi2012]模拟工厂 贪心
2667: [cqoi2012]模拟工厂 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 367 Solved: 184[Submit][Status] ...
- P3161 [CQOI2012]模拟工厂
传送门 先枚举选择哪些订单,然后转为判定是否可行 在能完成的情况下肯定是花越多时间提高生产力越优 我们设可以有\(x\)单位时间来提高生产力,那么如果当前离下一个订单的时间为\(T\)时,这个订单要\ ...
- [CQOI2012]模拟工厂 题解(搜索+贪心)
[CQOI2012]模拟工厂 题解(搜索+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327574 链接题目地址:洛谷P3161 BZOJ P26 ...
- [BZOJ2667][cqoi2012]模拟工厂
[BZOJ2667][cqoi2012]模拟工厂 试题描述 有一个称为“模拟工厂”的游戏是这样的:在时刻0,工厂的生产力等于1.在每个时刻,你可以提高生产力或者生产商品.如果选择提高生产力,在下一个时 ...
- 洛谷 题解 P3161 【[CQOI2012]模拟工厂】
本蒟蒻又双叒叕被爆踩辣! 题目链接 Solution: 这题又是一道贪心.. 数据范围: n<=15 ti<=100,000 gi<=10^9 mi<=10^9 这里就可以看到 ...
- [BZOJ2667][cqoi2012][kcoj]模拟工厂
题目描述 Description 有一个称为“模拟工厂”的游戏是这样的:在时刻0,工厂的生产力等于1.在每个时刻,你可以提高生产力或者生产商品.如果选择提高生产力,在下一个时刻时工厂的生产力加1:如果 ...
- Luogu 1090 合并果子(贪心,优先队列,STL运用)
Luogu 1090 合并果子(贪心,优先队列,STL运用) Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每 ...
- Luogu 1970 NOIP2013 花匠 (贪心)
Luogu 1970 NOIP2013 花匠 (贪心) Description 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使 ...
- luogu P5470 [NOI2019]序列 dp 贪心 费用流 模拟费用流
LINK:序列 考虑前20分 容易想到爆搜. 考虑dp 容易设\(f_{i,j,k,l}\)表示前i个位置 选了j对 且此时A选择了k个 B选择了l个的最大值.期望得分28. code //#incl ...
随机推荐
- 如何清除Windows共享登录的用户名密码
打开cmd 1.[查看已记录的登录信息] net use 2.[清除记录] 得关掉你所有打开的samba之后再 net use * /del
- 杭电多校第三场-H-Game
题目描述 Again Alice and Bob is playing a game with stones. There are N piles of stones labelled from 1 ...
- CSIC_716_20191205【TCP-解决粘包问题、UDP模板】
---------------------------------------------------------------------------------------------------- ...
- 【转】硬盘分区知识介绍(MBR)
转自:http://www.blogjava.net/galaxyp/archive/2010/04/25/319344.html 硬盘是现在计算机上最常用的存储器之一.我们都知道,计算机之所以神奇, ...
- springboot java.util.NoSuchElementException: No value present 异常处理
使用jpa查询的时候,如果查询不到数据,就会返回这个错误,下面是处理方法. @Override public User findByEmail(String email) { User user = ...
- Web API 接口参考
Web API 接口参考:https://developer.mozilla.org/zh-CN/docs/Web/API
- 听说“辣鸡小隔膜”出V1.3了?
点击下载zip就送屠龙宝刀升级脚本(Version 1.2) 点击下载zip就送倚天宝剑种子测试器(Version 1.2) 顺便膜一波orz::Kevin
- 线性筛积性函数+反演T套路——bzoj4407
#include<bits/stdc++.h> using namespace std; #define ll long long #define mod 1000000007 #defi ...
- NXOpenC#_Training_1(cn)【转载】
- Socket心跳包异常检测的C语言实现,服务器与客户端代码案例
在Socket心跳机制中,心跳包可以由服务器发送给客户端,也可以由客户端发送给服务器,不过比较起来,前者开销可能较大.本文实现的是由客户端给服务器发送心跳包,服务器不必返回应答包,而是通过判断客户在线 ...