日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LOJ洛谷P1248加工生产调度(贪心、Johnson 法则)

發布時間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LOJ洛谷P1248加工生产调度(贪心、Johnson 法则) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

解析

國王游戲一樣的做法
容易寫出cmp函數的依據:

min(u.a,v.b)<min(u.b,v.a)

但是這個題的比較函數有一個取min的操作
這個東西會有一個問題:不滿足不可比性的傳遞性
通俗的說,x=y,y=z,但是x不一定=z
比如說如果y的a和b都很小,就會出現這個無論a和c之間關系如何,等式總是成立的尷尬情況
為了避免這個東西,引入了Johnson 法則
設置d

d=1(a>b)
d=0(a=b)
d=-1(a<b)

在d不同時,優先按照d排序(顯然d不同時是正確的)
d相同在把他們的最小值比較即可

bool operator<(const node &x)const{if(d==x.d){if(d<=0)return a<x.a;//這里的等于是將上面的情況2找了一種方法排序else return b>x.b;}return d<x.d; }

代碼

(先是自己搞的所有沒有按題解寫)

#include<bits/stdc++.h> using namespace std; #define ll long long #define il inline const int N=4e3+100; const int M=150; const int mod=998244353; const int mx=7e4; inline ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f; } int n; struct node{int a,b,id; }p[N]; bool cmp (const node u,node v){if(min(u.a,v.b)!=min(u.b,v.a)) return min(u.a,v.b)<min(u.b,v.a);return u.a<v.a; }int main(){n=read();for(int i=1;i<=n;i++) p[i].a=read(),p[i].id=i;for(int i=1;i<=n;i++) p[i].b=read();sort(p+1,p+1+n,cmp);int ta=0,tb=0;for(int i=1;i<=n;i++){ta+=p[i].a;tb=max(ta,tb)+p[i].b;}printf("%d\n",tb);for(int i=1;i<=n;i++){printf("%d",p[i].id);putchar(' ');}return 0; } /**/

總結

以上是生活随笔為你收集整理的LOJ洛谷P1248加工生产调度(贪心、Johnson 法则)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。