P2392kkksc03考前臨時抱佛腳

2022-09-10 16:21:21 字數 1616 閱讀 5992

一.題目描述:

二.解題思路:

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

三.**實現:

1 #include "

bits/stdc++.h"2

using

namespace

std;

3int a[100],b[100],c[100],d[100];4

int dpa[11000];5

intmain()615

for(int i = 1;i <= s2;i++)

19for(int i = 1;i <= s3;i++)

23for(int i = 1;i <= s4;i++)

27int sum = 0;28

for(int i = 1;i <= s1;i++)

29for(int j = res1 / 2;j >= a[i];j--)

30 dpa[j] = max(dpa[j],dpa[j - a[i]] +a[i]);

3132 sum += res1 - dpa[res1/2

];33 memset(dpa,0,sizeof

(dpa));

34for(int i = 1;i <= s2;i++)

35for(int j = res2 / 2;j >= b[i];j--)

3839

40 sum += res2 - dpa[res2/2

];41 memset(dpa,0,sizeof

(dpa));

4243

for(int i = 1;i <= s3;i++)

44for(int j = res3 / 2;j >= c[i];j--)

45 dpa[j] = max(dpa[j],dpa[j - c[i]] +c[i]);

4647 sum += res3 - dpa[res3/2

];48 memset(dpa,0,sizeof

(dpa));

4950

51for(int i = 1;i <= s4;i++)

52for(int j = res4 / 2;j >= d[i];j--)

53 dpa[j] = max(dpa[j],dpa[j - d[i]] +d[i]);

5455 sum += res4 - dpa[res4/2

];56 memset(dpa,0,sizeof

(dpa));

5758 cout << sum <

59return0;

60 }

洛谷 P2392 kkksc03考前臨時抱佛腳

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

洛谷 P2392 kkksc03考前臨時抱佛腳

因為資料的範圍不大,可以直接的搜尋,也可以使用01揹包解題對於乙個問題,要麼加在左腦,要麼加在右腦 搜尋所有這樣的組合,選取左右腦中最大的,所有組合最小的時間就是解該科目問題的最短時間。再把四科的時間加起來就是答案。沒有使用任何的剪枝也能過 include include include defin...

洛谷 P2392 kkksc03考前臨時抱佛腳

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