題目 配置魔藥

2022-05-31 13:09:13 字數 1461 閱讀 7125

【問題描述】

在《harry potter and the chamber of secrets》中,ron的魔杖因為坐他老爸的flying car撞到了打人柳,不幸被打斷了,從此之後,他的魔杖的魔力就大大減少,甚至沒辦法執行他施的魔咒,這為ron帶來了不少的煩惱。這天上魔藥課,snape要他們每人配置一種魔藥(不一定是一樣的),ron因為魔杖的問題,不能完成這個任務,他請harry在魔藥課上(自然是躲過了snape的檢查)幫他配置。現在harry面前有兩個坩堝,有許多種藥材要放進坩堝裡,但坩堝的能力有限,無法同時配置所有的藥材。乙個坩堝相同時間內只能加工一種藥材,但是不一定每一種藥材都要加進坩堝裡。加工每種藥材都有必須在乙個起始時間和結束時間內完成(起始時間所在的那一刻和結束時間所在的那一刻也算在完成時間內),每種藥材都有乙個加工後的藥效。現在要求的就是harry可以得到最大的藥效。

出自:宜昌一中

【輸入】

輸入檔案的第一行有2個整數,一節魔藥課的t(1≤t

輸入檔案第2行到n+1行中每行有3個數字,分別為加工第i種藥材的起始時間t1、結束時間t2、(1≤t1≤t2≤t)和藥效w(1≤w≤100)。

【輸出】

輸出檔案medic.out只有一行,只輸出乙個正整數,即為最大藥效。

題解:第一次做雙線程動態規劃,所以也就花了我星期三乙個晚自習的時間。

設f[i][j]為坩堝1在第 i 的時間與坩堝2在第 j 的時間內所得最大藥效。

可得動態轉移方程:

f[i][j]=max  //i>=a[k][2]

f[i][j]=max //j>=a[k][2]

滿足了第 k 個物品只取入乙個坩堝或不取。

當然,僅僅是這樣還是不能保證能求出最優解,因為在計算過程中,結構會被重新整理,因此對於結束時間較晚的藥材,若在結束時間較前的藥材先被計算,則較前的藥材就以為價值小而不會被記錄,因此就應該在動態規劃之前將資料按結束時間a[i][2](即結束時間)公升序排序。或者晚結束的藥材更新的時候需要早結束的都更新過了的狀態,方程才得以轉移。

view code

1 #include

2using

namespace std;34

int f[501][501]=,a[101][3],w[101],n,m;56

void quick(int l,int r)

17 swap(a[i][1],a[j][1]);swap(a[i][2],a[j][2]);swap(w[i],w[j]);i++;j--;}

18 }

19 quick(l,j);

20 quick(i,r);

2122 }

2324

int main()

25 41

42 cout<43

44return

0;45

46 }

SSL P2147 配置魔藥

魔法課時,harry面前有兩個坩堝,有許多種藥材。乙個坩堝相同時間內只能加工一種藥材,但是不一定每一種藥材都要加進坩堝裡。魔法課的時間只有t,有n種藥材,會給出加工第i種藥材的起始時間t1 結束時間t2,和藥效w。現在要求的就是harry可以得到最大的藥效。對於30 的資料 1 t 500 1 n ...

天貓魔筒是什麼?天貓魔筒配置引數介紹

天貓魔筒是什麼?下文將為大家介紹天貓魔筒功能配置方面的訊息,天程式設計客棧貓tybpx出tybpx品的這個 筒 是用來做什麼的呢?之前的天貓魔盒是一款機頂盒,那麼天貓魔筒呢?請通過下文了解吧。天貓在今年4月曾宣布正在研發一款 這個星球上最便宜的雙頻ac智慧型路由器 產品,而 天貓魔筒 就是這款產品的...