【問題描述】
在《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 #include2using
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智慧型路由器 產品,而 天貓魔筒 就是這款產品的...