Skip to content

Commit 091770d

Browse files
authored
add solution for The Painter's Partition Problem
binnary search O(n log sum a[i])
1 parent d23e974 commit 091770d

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#include<bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
#define ms(x,v) memset((x),v,sizeof(x))
6+
#define INF 0x3f3f3f3f
7+
8+
const int MAXN = 55;
9+
10+
11+
int a[MAXN];
12+
int n,k;
13+
bool ok(int x){
14+
int kk =1;
15+
int s =0;
16+
for(int i=1; i<=n ; ++i){
17+
if(s + a[i] > x){
18+
kk++;
19+
s = a[i];
20+
}else s+=a[i];
21+
}
22+
return kk <=k;
23+
}
24+
25+
int main(int argc, const char * argv[]) {
26+
27+
int T;
28+
ios :: sync_with_stdio(0);
29+
cin.tie(0);
30+
31+
32+
cin >> T;
33+
while(T--){
34+
cin >> k >> n;
35+
if(k >n)k = n;
36+
for(int i=1 ; i <=n ; ++i)cin >>a[i];
37+
int low = 0;
38+
for(int i=1 ; i<=n ; ++i)if(low <a[i])low = a[i];
39+
40+
int l = low;
41+
int r = 500 * n;
42+
while(l <=r){
43+
int mid = (l + r) >> 1;
44+
if(ok(mid))r = mid -1;
45+
else l = mid +1;
46+
}
47+
cout << r +1 << "\n";
48+
}
49+
50+
return 0;
51+
}

0 commit comments

Comments
 (0)