思路:先構成生產週期最短的最優作業順序:
1.把作業分為兩類,
a類 : 第乙個花的作業的時間
b類 : 第乙個花的作業的時間》= 第二個花的作業的時間
2.排序
對a類進行排序:按第乙個花的作業的時間從小到大
對b類進行排序:按第二個花的作業的時間從大到小
3.合併
把a類b類作業合併即為生產週期最短的最優作業順序
輸出他們作業的順序:
"<
for(int i=0;i)
cout
cout
<
int sum=p[0
].x;
int res=p[0].x+p[0
].y;
for(int i=1;i)
cout
<
"<
printf(
"%d\n
",res);
}return0;
}
#include#includenoip 1205#include
using
namespace
std;
#define max_v 50005
struct
nodep[max_v],pp[max_v];
bool
cmp1(node a,node b)
bool
cmp2(node a,node b)
intmain()
else
}sort(p,p+len1,cmp1);
sort(pp,pp+len2,cmp2);
for(int i=len1;i)
//cout<
for(int i=0;i//
cout/
cout
].x;
int res=p[0].x+p[0
].y;
for(int i=1;i)
//%d\n
",res);
}return0;
}
動態規劃的思想:
思路:johnson演算法:
1:將任務分為兩類,a類任務t1=t2
2:兩類任務分別排序,其中a類按 t1 遞增排序,b類按 t2 遞減排序
3:合併兩類,將第二類任務接到第一類任務後面,此時任務的順序最佳
4:遍歷所有任務,計算總耗時
說下我的理解,對於 t1作業來說肯定是一直執行的,那麼對於 t2 作業則會有 空閒和堆積兩種境況,按照最小耗時,顯然是不允許出現空閒情況的,因此 要先將 作業中 t1=t2的作業了,此時t2作業還處於堆積情況中,當每執行乙個作業,由於 t1>=t2,t2作業中堆積的作業耗時會越來越小,因此要先將 t2較大的先執行,否則t2較大的滯留在最後便會增加耗時,因此再將 t1>=t2的作業按照 t2遞減的順序執行,如此便為最小耗時。
/*johnson演算法:
1:將任務分為兩類,a類任務t1=t2
2:兩類任務分別排序,其中a類按 t1 遞增排序,b類按 t2 遞減排序
3:合併兩類,將第二類任務接到第一類任務後面,此時任務的順序最佳
4:遍歷所有任務,計算總耗時
*/#include
#include
using
namespace
std;
typedef
long
long
ll;
struct
node };
const
int max_n=50005
;int
n;int
a[max_n],b[max_n];
node d[max_n];
intbest[max_n];
intmain()
sort(d,d+n);
int l=0,r=n-1
;
for(int i=0;i)
if(d[i].group) best[l++]=d[i].id;
else best[r--]=d[i].id;
ll sum=0,ans=0
;
for(int i=0;i)
cout
//for(int i=0;i//
printf("%d ",best[i]+1);
//printf("\n");
return0;
}
2204 母艦 經典貪心
2204 母艦 時間限制 1 s 空間限制 32000 kb 題目等級 gold 在小a的星際大戰遊戲中,一艘強力的母艦往往決定了一場戰爭的勝負。一艘母艦的攻擊力是普通的ma mobile armor 無法比較的。對於一艘母艦而言,它是由若干個攻擊系統和若干個防禦系統組成的。兩艘母艦對決時,一艘母艦...
貪心經典題目
問題描述 有n個人排隊到r個水龍頭去打水,他們裝滿水桶的時間為t1,t2,tn為整數且各不相等,應如何安排他們的打水順序才能使他們花費的時間最少?樣例輸入 4 2 4人打水,2個水龍頭 2 6 4 5 每個打水時間 先放 include include include using namespace...
貪心經典小題
題目背景 快noip了,yyy很緊張!題目描述 現在各大oj上有n個比賽,每個比賽的開始 結束的時間點是知道的。yyy認為,參加越多的比賽,noip就能考的越好 假的 所以,他想知道他最多能參加幾個比賽。由於yyy是蒟蒻,如果要參加乙個比賽必須善始善終,而且不能同時參加2個及以上的比賽。輸入輸出格式...