題目背景
kkksc03的大學生活非常的頹廢,平時根本不學習。但是,臨近期末考試,他必須要開始抱佛腳,以求不掛科。
題目描述
這次期末考試,kkksc03需要考4科。因此要開始刷習題集,每科都有乙個習題集,分別有s1,s2,s3,s4道題目,完成每道題目需要一些時間,可能不等(a1…as1,b1…bs2,c1…cs3,d1…ds4)。
kkksc03有乙個能力,他的左右兩個大腦可以同時計算2道不同的題目,但是僅限於同一科。因此,kkksc03必須一科一科的複習。
由於kkksc03還急著去處理洛谷的bug,因此他希望盡快把事情做完,所以他希望知道能夠完成複習的最短時間
輸入格式
本題包含5行資料:第1行,為s1,s2,s3,s4(1≤s1,s2,s3,s4≤20)
第2行,為a1…as1 共s1個數,表示第一科習題集每道題目所消耗的時間。
第3行,為b1…bs2 共s2個數,
第4行,為c1…cs3 共s3個數,
第5行,為d1…ds4 共s4個數,意思均同上。
(1≤a1…as1,b1…bs2,c1…cs3,d1…ds4≤60)
輸出格式
輸出一行,為複習完畢最短時間。
輸入 #1
1 2 1 3輸出 #1 首先,這是一道假貪心,真揹包;寫了幾十行貪心**,交上去爆0,太tm無語了;54 3
62 4 3
把單個科目的總時間加起來,作為單個科目最大的複習時間m,然後轉化為揹包題,求m/2的最大複習時間;還有乙個點,將一邊的腦子加到最接近一半則另一邊腦子時間就是正解
**:
#include
using
namespace std;
int s[5]
;int a[5]
[30];
int dp[
3000];
int b[5]
;int sum;
intmain()
}for
(int i=
1;i<=
4;i++)}
} sum+
=b[i]
-dp[b[i]/2
];memset
(dp,0,
sizeof
(dp));
}printf
("%d\n"
,sum)
;return0;
}
暴力列舉 kkksc03考前臨時抱佛腳
kkksc03 的大學生活非常的頹廢,平時根本不學習。但是,臨近期末考試,他必須要開始抱佛腳,以求不掛科。這次期末考試,kkksc03 需要考 4 科。因此要開始刷習題集,每科都有乙個習題集,分別有 s1,s2,s3,s4 道題目,完成每道題目需要一些時間,可能不等 a1,a2,as1,b1,b2,...
P2392kkksc03考前臨時抱佛腳
一.題目描述 二.解題思路 剛開始一直有個錯覺,以為左右腦做個貪心就可以了,一交全wa,不信,再交一邊,又全wa,然後我突然想到了以前學dp的時候,做過乙個類似於求解陣列分成兩部分求和最小題目,這個應該就是那個題目的變形,然後我就開始上模板了,一頓cv,交上去莫名ac。三.實現 1 include ...
洛谷p2392考前臨時抱佛腳(動態規劃和搜尋)
kkksc03 的大學生活非常的頹廢,平時根本不學習。但是,臨近期末考試,他必須要開始抱佛腳,以求不掛科。這次期末考試,kkksc03 需要考 4 科。因此要開始刷習題集,每科都有乙個習題集,分別有s1,s2,s3,s4 道題目,完成每道題目需要一些時間,可能不等 a1,a2,as1 b1,b2,b...