洛谷p2392考前臨時抱佛腳(動態規劃和搜尋)

2021-10-05 14:53:57 字數 2272 閱讀 9761

kkksc03 的大學生活非常的頹廢,平時根本不學習。但是,臨近期末考試,他必須要開始抱佛腳,以求不掛科。

這次期末考試,kkksc03 需要考 4 科。因此要開始刷習題集,每科都有乙個習題集,分別有s1,s2,s3,s4​ 道題目,完成每道題目需要一些時間,可能不等

(a1,a2,…,as1​​,b1,b2,…,bs2,c1,c2,…,cs3,d1,d2,​,…,ds4​​)。kkksc03 有乙個能力,他的左右兩個大腦可以同時計算 2 道不同的題目,但是僅限於同一科。因此,kkksc03 必須一科一科的複習。由於 kkksc03 還急著去處理洛谷的 bug,因此他希望盡快把事情做完,所以他希望知道能夠完成複習的最短時間。

本題包含 555 行資料:

第 1 行,為四個正整數 s1,s2,s3,s4

第 2 行,為 a1,a2,…,as1​​ 共s1​ 個數,表示第一科習題集每道題目所消耗的時間。

第 3 行,為 b1,b2,…,bs2共 s2個數。

第 4 行,為 c1,c2,…,cs3​​ 共 s3​ 個數。

第 5 行,為 d1,d2,…,ds4​​ 共 s4​ 個數,意思均同上。

輸出一行,為複習完畢最短時間。

121

3543

6243

20
四個科目不能同時計算,所以是四個科目分別計算得到的時間值之和。對於每乙個科目,計算方式相同,現在左右腦同時計算,問所用時間最少,那麼可以分析得出,當左右腦的時間差最少時,把該科目題目算完所用時間最少。要得出該時間,對於每道題,都有選與不選兩種狀態,即0-1揹包問題。總時間的一半相當於揹包總空間,價值和消耗都是花費的時間。計算出四個科目的時間,再相加就可以了。

#include

using

namespace std;

int a[5]

;//存四種科目每個科目的題目數

int ans =0;

//存所求,即四種科目所用最少時間和

int p[30]

,dp[

2005];

//存每個科目每道題所用時間和動態規劃存最短時間

intmain()

for(

int i =

1; i <=4;

++i)

for(

int j =

1; j <= a[i]

;++j)

//接下來是動態規劃的步驟

} ans +

= sum-dp[sum/2]

;//要加上另一半時間,因為計算出來的這半時間小於等於sum/2,所以要加上另一半時間

memset

(dp,0,

sizeof

(dp));

//對dp陣列初始化為0

} cout << ans;

//輸出所求

return0;

}

對於每一道題,都有放左腦和放右腦兩種選擇,可以進行搜尋找符合條件的排列。搜尋的結束條件是已計算題目個數大於該科目題目數,那麼可以得出該科目計算完畢所需要的時間為左右腦使用時間最大值中的最小值。(最大值是對於一種情況中,左右腦的最大值,最小值是對於每種情況得出的最大值中的最小值,就是所求最小值)

#include

using

namespace std;

int left, right, minn, ans;

//左腦,右腦,最小值,所求值

int s[5]

;//存每個科目的題目數

int a[21]

;//存

void

search

(int x,

int y)

left +

= a[x]

;//把此題加到左腦

search

(x +

1,y)

;//繼續安排下一道題

left -

= a[x]

;//把此題退出左腦

right +

= a[x]

;//把此題加到右腦

search

(x +

1, y)

;//繼續安排下一道題

right -

= a[x]

;//把此題退出右腦

}int

main()

cout << ans;

return0;

}

注意:這道題不能用貪心演算法做

P2392kkksc03考前臨時抱佛腳

一.題目描述 二.解題思路 剛開始一直有個錯覺,以為左右腦做個貪心就可以了,一交全wa,不信,再交一邊,又全wa,然後我突然想到了以前學dp的時候,做過乙個類似於求解陣列分成兩部分求和最小題目,這個應該就是那個題目的變形,然後我就開始上模板了,一頓cv,交上去莫名ac。三.實現 1 include ...

kkksc03考前臨時抱佛腳(洛谷 P2392)

題目背景 kkksc03的大學生活非常的頹廢,平時根本不學習。但是,臨近期末考試,他必須要開始抱佛腳,以求不掛科。題目描述 這次期末考試,kkksc03需要考4科。因此要開始刷習題集,每科都有乙個習題集,分別有s1,s2,s3,s4道題目,完成每道題目需要一些時間,可能不等 a1 as1,b1 bs...

暴力列舉 kkksc03考前臨時抱佛腳

kkksc03 的大學生活非常的頹廢,平時根本不學習。但是,臨近期末考試,他必須要開始抱佛腳,以求不掛科。這次期末考試,kkksc03 需要考 4 科。因此要開始刷習題集,每科都有乙個習題集,分別有 s1,s2,s3,s4 道題目,完成每道題目需要一些時間,可能不等 a1,a2,as1,b1,b2,...