一.題目描述:
二.解題思路:
剛開始一直有個錯覺,以為左右腦做個貪心就可以了,一交全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...