首页 > 其他分享 >洛谷P3161 [CQOI2012] 模拟工厂题解

洛谷P3161 [CQOI2012] 模拟工厂题解

时间:2023-11-24 19:14:31浏览次数:32  
标签:洛谷 题解 ll P3161 times mt num time st

P3161[CQOI2012]模拟工厂题解。题目

其实发现这是一道状压,发现这道题是一道数学题,其实就很简单了。对于每一次的订单我们可以设:

  • \(time\) 为距离下一个订单的时间。
  • \(num\) 为这个订单要生产的数量。
  • \(x\) 为生产能力。
  • \(y\) 的时间可以用来提高工厂的生产力。那我们就可以得出公式:\((x+y)\times (time-y) = num\)

整理后:(一元二次方程应该都会对吧。)\(y^2+(x-time)\times y-x\times time+num\)

一个一元二次方程肯定要判根啊,如果有实数根那么就是有解。所以我们只需要对方程判根,有根那么这个订单就可以完成。

如果有实数根只需要解这个方程即可:\(\dfrac{time - x + \sqrt{(x-time)^2 - 4\times x\times time-4\times num}}{2 }\)

程序首先先枚举每一个状态:状压!毕竟 \(n\le15\)。然后就去计算每一个订单,进行计算,判断可行性,对可行的方案取 \(\max\) 即可。AC code:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct node{
	ll t,g,m;
}a[25],st[25];
ll n;
bool cmp(node a,node b){
	return a.t < b.t;
}
ll jisuan(ll x,ll time,ll y){
	ll a = 1;
	ll b = x-time;
	ll c = y-x*time;
	ll delta = b*b-4*a*c;
	if(delta>=0)return (ll)((-b+sqrt(delta)) / 2 / a);
	return -1;
}
ll ans;
void run(ll zy){
	ll t = 0;
	ll sum =0;
	for(int i = 1;i <= n;i++){
		if(zy & (1<<(i-1))) {
			st[++t] = a[i];
			sum += a[i].m;
		}
	}
	
	ll m=1;
	ll sheng=0;
	
	for(ll i = 1;i <= t;i++){
		ll mt = st[i].t - st[i-1].t;
		//最多提高生产力的时间
		ll num=0;//所有产品累计
		for(ll j =i;j<=t;j++){
			num += st[j].g;
			if(num > sheng){
				mt = min(mt,jisuan(m,st[j].t-st[i-1].t,num-sheng));
			}
		}
		if(mt == -1) return ;
		m += mt;
		sheng += m * (st[i].t-st[i-1].t-mt) - st[i].g;
	}
	ans = max(ans,sum);
}	
int main(){
	cin >> n;
	for(ll i = 1;i <= n;i++){
		cin >> a[i].t >> a[i].g >> a[i].m;
	}
	sort(a+1,a+1+n,cmp);
	for(ll i = 0;i < (1<<n);i++){
		run(i);//状压,2^n枚举所有订单可能性
	}
	cout << ans;
	return 0;
}

给蒟蒻的第一篇题解点个赞呗
广告
算了,还不如来这里

标签:洛谷,题解,ll,P3161,times,mt,num,time,st
From: https://www.cnblogs.com/gsczl71/p/17854545.html

相关文章

  • Ubuntu20.04 安装后部分问题解决方案
    安装搜狗输入法搜狗官方有教程:https://shurufa.sogou.com/linux/guideUbuntu与Windows时间不一致的问题安装ntpdate:sudoapt-getinstallntpdate校准时间:sudontpdatetime.windows.com将时间更新到硬件上:sudohwclock--localtime--systohc单击任务栏图标使窗......
  • [ARC117E] Zero-Sum Ranges 2题解
    题解前言个人认为官方题解写得最为详细、干净、清楚,如果有意向阅读外文版的题解的话,还是推荐去读一读:Editorial-AtCoderRegularContest117本文属于转载(?),有一些自己的思考过程,希望有帮助。题意有多少个长度为\(2N\)的序列\(A\)满足:序列\(A\)包含\(N\)个\(+1\)......
  • P9779_[HUSTFC 2023] 不定项选择题_题解
    #[rt](https://www.luogu.com.cn/problem/P9779)#题目#####有一道共n个选项的不定项选择题,它的答案至少包含一个选项,由于题目与选项的内容晦涩难懂,你打算通过尝试每一种可能的答案来通过这道题。#####初始时所有选项都没有被勾选,你可以执行任意次下述操作:-###勾选一个当前......
  • 【题解 P2839】 middle
    [国家集训队]middle题目描述一个长度为\(n\)的序列\(a\),设其排过序之后为\(b\),其中位数定义为\(b_{n/2}\),其中\(a,b\)从\(0\)开始标号,除法下取整。给你一个长度为\(n\)的序列\(s\)。回答\(Q\)个这样的询问:\(s\)的左端点在\([a,b]\)之间,右端点在\([c,d]\)......
  • CF1864D 题解
    我们注意到对如图倒三角形上的所有点操作都会影响到目标点。那么我们可以维护两个前缀和,第一个前缀和表示如下的点是否操作第二个前缀和表示这些点是否操作这样我们求出了前缀和之后,将两个前缀和异或一下就知道该点是否要操作了。#include<bits/stdc++.h>usingnamespace......
  • apache ftpserver服务器安装及服务启动问题解决
     在安装apacheftpserver后作为系统服务启动时遇到不能启动成功的问题,在网上各种搜索,发现很多人也遇到了同样的问题,折腾了1天,尝试了添加dll动态链接库、tomcat.exe替换ftpd.exe等还是没搞定。最后查看服务安装脚本service.bat,发现问题所在,现记录下过程中遇到的坑,分享出来参考,避......
  • 「杂题乱刷」洛谷P9515
    原题链接P9515「JOC-1A」限时签到题意简述有一条公路上有\(n\)个商店,每个商店分别在不同的时刻开放,求如何在\(t\)时刻之前到达\(f\)点并且到达最多开放的商店的数量,特别的,一个时刻只能走一格。解题思路这一道题是一道贪心题。首先,因为要在\(t\)时刻之前到达\(f\)......
  • 「杂题乱刷」洛谷P9253
    题目链接P9253[PA2022]Ornitolog2题目简述给定一个音高序列,输出最少要修改多少整数才能使这个序列成为交替鹡鸰鸟鸣的音高序列。题意分析操作后的音高序列总共有\(2\)种可能:音量由高变低再由低变高;音量由低变高再由高变低。又因为大小范围是\(10^4\times5......
  • 洛谷 P8955 「VUSC」Card Tricks
    洛谷传送门很显然每个数的每一位最多只会修改一遍。于是拆位,每一位开个并查集,存下一个不拥有这一位的数,就可以暴力修改了。但是空间是\(O(n\logV)\)的,炸了。于是可以考虑手写i24类,同时并查集寻找祖先不要用递归版的路径压缩,然后就过了。code//Problem:P8955「VUSC」......
  • Vue + Element UI 实现复制当前行数据功能(复制到新增页面组件值不能更新等问题解决)
    1、需求使用Vue+ElementUI实现在列表的操作栏新增一个复制按钮,复制当前行的数据可以打开新增弹窗后亦可以跳转到新增页面,本文实现为跳转到新增页面。2、实现1)列表页index.vue<el-table><!--其他列--><el-table-columnlabel="操作"width="150"><templateslot-s......