[CQOI2012]模擬工廠 題解(搜索+貪心)

[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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279003.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279003.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279003.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

上傳文件的input問題以及FormData特性

1.input中除了type"file"還要加上name"file"&#xff0c;否則$_FILES為空&#xff0c;input的name值就是為了區分每一個input的 2.var formdata new FormData($("#form")[0]); 或者var formdata new FormData(document.getElementById("f…

iphone手機備忘錄遷移_如何在iPhone和iPad上使用語音備忘錄

iphone手機備忘錄遷移Whether you’re recording a voice message as a reminder of that million dollar idea or catching a snippet of a new song you know you’ll forget, the iPhone and iPad’s Voice Memos app is the perfect tool. 無論您是錄制語音消息來提醒這一百…

php 執行文件tar打包,利用tar for windows對大量文件進行快速打包

近期將某些網站換服務器&#xff0c;由于網站數量巨大&#xff0c;加上附件和靜態頁&#xff0c;文件數量異常多&#xff0c;考慮先打包然后直接傳過去。起初嘗試用winrar打包&#xff0c;但是發現即使選擇”僅儲存”速度仍然慢到無法接受&#xff0c;后來想到了tar&#xff0c…

DDD~領域事件中使用分布式事務

對于一個聚合來說&#xff0c;它可能會被附加很多事件&#xff0c;這里我們叫它領域事務&#xff0c;因為一個聚會我們可以把它理解成一個領域&#xff0c;一個業務。對于領域事件不清楚的同學可以看看我的這篇文章《DDD~領域事件與事件總線》&#xff0c;里面有詳細的說明&…

如何在PowerPoint中制作打字機或命令行動畫

Adding quirky animations to your Microsoft PowerPoint presentation gives your slideshow a little extra life. Not only will adding a typewriter or command line animation entertain your audience, but it will also keep them focused on the text. 在您的Microsof…

oracle中spool卸數,數據卸載--spool的使用

&#xfeff;&#xfeff;引言在項目中&#xff0c;我們經常會遇到數據的卸載、裝載需求。卸載就是需要將數據從數據庫中導入到文本文件中的需求&#xff0c;這樣的方法有很多&#xff0c;比較常用的就是spool命令。裝載就是需要將數據從文本文件中導入到數據庫中。方法也有很多…

Objective-C中的@property

1.property是什么 Property是聲明屬性的語法&#xff0c;它可以快速方便的為實例變量創建存取器&#xff0c;并允許我們通過點語法使用存取器。 存取器&#xff08;accessor&#xff09;&#xff1a;指用于獲取和設置實例變量的方法。用于獲取實例變量值的存取器是getter&#…

Linux基礎命令---findfs

findfs 查找指定卷標或者UUID的文件系統對應的設備文件。findfs將搜索系統中的磁盤&#xff0c;尋找具有標簽匹配標簽或與UUID相等的文件系統。如果找到文件系統&#xff0c;文件系統的設備名稱將打印在stdout上。 此命令的適用范圍&#xff1a;RedHat、RHEL、Ubuntu、CentOS、…

canvas 平滑運動_什么是電視上的運動平滑?人們為什么討厭它?

canvas 平滑運動Willy Barton/Shutterstock.com威利巴頓/Shutterstock.comIf you’ve just bought a new TV, you might be wondering why everything you watch feels eerily sped up and smooth, like you’re watching a live broadcast all the time. You’re not imaginin…

linux guard什么進程,使用linux系統性能監控工具KSysguard監控遠端主機介紹

KDE System Guard默認的窗口前端圖形界面使用傳感器(sensors)獲得要顯示的信息。傳感器返回的可以是一個簡單的數值或更復雜的信息如表格。針對不同的信息類型都提供了一個或多個顯示界面。這些顯示界面被組織在多個工作表中&#xff0c;工作表可以獨立存儲和加載。KSysguard主…

macbook充電_如何判斷MacBook是否正在充電

macbook充電2p2play / Shutterstock2p2play / ShutterstockForgetting to charge your MacBook properly overnight can leave you with a headache in the morning. And if you’re troubleshooting a broken MacBook, checking if it’s able to charge is one way to rule o…

mysql記錄

當沒有用EXISTS引入子查詢時&#xff0c;在選擇列表中只能指定一個表達式轉載于:https://www.cnblogs.com/niuben/p/9920741.html

PIL.Image convert to numpy array

當使用PIL.Image讀取圖像時&#xff0c;如果直接使用numpy.array()轉換會出現錯誤&#xff1a; lst list() for file_name in os.listdir(dir_image):image PIL.Image.open(file_name)lst.append(image) arr numpy.array(lst) 此時&#xff0c;上述最后一行在執行時會出現錯…

NFC服務器在Linux,linux 安裝 libnfc ,打開串口PN532

硬件準備&#xff1a;USB轉串口4針杜邦線PN532模塊IC卡一張(比如門禁卡&#xff0c;飯卡等)軟件準備&#xff1a;Ubuntu 物理機一臺能夠訪問互聯網1&#xff0c;將PN532與USB轉串口連接好,放一張IC卡靠近PN532模塊2&#xff0c;安裝libnfc&#xff1a;chunliubuntu:~$ sudo apt…

chrome同步_如何在Chrome中打開或關閉同步

chrome同步Google Chrome lets you sync up your Google account to your browser across any device. When enabled, bookmarks, history, passwords, extensions, and themes—among many other settings—sync from your Google account, creating a seamless experience no…

sublime text3搭建react native

Sublime Text 3 搭建React.js開發環境 Sublime有很強的自定義功能&#xff0c;插件庫很龐大&#xff0c;針對新語言插件更新很快&#xff0c;配合使用可以快速搭建適配語言的開發環境。 1. babel-sublime 支持ES6&#xff0c; React.js, jsx代碼高亮&#xff0c;對 JavaScript,…

linux系統輸入指令,詳解linux系統輸入輸出管理和vim的常用功能

####系統中輸入輸出的管理####1.理解系統的輸入輸出重定向輸入重定向是指把文件導入到命令中&#xff0c;而輸出重定向則是把原本要輸出到屏幕的數據信息寫入到指定文件中。2.管理輸入輸出的符號##輸出重定向> ##重定向正確輸2> ##重定向錯誤輸出&> …

Deep Learning(深度學習)學習筆記整理(二)

本文整理了網上幾位大牛的博客&#xff0c;詳細地講解了CNN的基礎結構與核心思想&#xff0c;歡迎交流 [1]Deep learning簡介 [2]Deep Learning訓練過程 [3]Deep Learning模型之&#xff1a;CNN卷積神經網絡推導和實現 [4]Deep Learning模型之&#xff1a;CNN的反向求導及練習 …

百度新聞 谷歌新聞_每日新聞摘要:到目前為止,Google I / O提供的最佳信息

百度新聞 谷歌新聞Google’s yearly developer conference started yesterday, and the keynote was chock-full of announcements, demos, and some utterly mind-blowing tech. From Assistant to Android, here’s some of the best stuff to come out of I/O 2019 so far. …

u盤裝服務器linux軟件,服務器維護給您的U盤安裝linux

服務器維護給您的U盤安裝linux如何做好服務器維護?北京艾銻無限科技與你談談IT人員必須知道的服務器維護信息服務器維護小知識因為現在linux普及率實在不高&#xff0c;很多地方都沒有安裝&#xff0c;包括高校機房。為了自身方便和宣傳推廣linux&#xff0c;決定在U盤上安裝一…