#include<bits/stdc++.h>
#include<algorithm>
#include<unordered_set>
#include<unordered_map>
using namespace std;
using namespace std::chrono;
#define pii pair<int,pair<int,int>>
#define pi pair<int,int>
#define MAXSIZE 100
#define ll long long
const int MOD = 1e9 + 7;
const int MAXBIT = 30;
const int INF = INT_MAX;
const int NINF= INT_MIN;
void printArr(string str, vector<int> arr){
cout<<str<<endl;
for(int val: arr)
cout<<val<<" ";
cout<<endl;
}
/*----START CODING FROM HERE-------*/
int dfs(int idx, vector<int> &sum, vector<int> &A, int k, int maxBucketSize){
int n= A.size();
if(idx == n){
return 1;
}
//try placing in one of the kth buckets
for(int i=0;i<k;i++){
if(sum[i] + A[idx] > maxBucketSize) continue;
sum[i]+= A[idx];
int res= dfs(idx+1, sum, A, k, maxBucketSize);
sum[i]-= A[idx];
if(res == 1) return 1;// subset possible with this maxbucketSize
}
return 0;
};
int solve(vector<int> A, int k){
int n=A.size();
vector<int> sum1(k,0);
int l= *min_element(A.begin(), A.end());
int r= accumulate(A.begin(),A.end(),0);
int ans=-1;
while(l<=r){
int mid= l+(r-l)/2;
vector<int> sum(k,0);
if(dfs(0,sum,A,k,mid) == 1){
ans=mid;
r=mid-1;
}else{
l=mid+1;
}
}
return ans;
}
int main() {
vector<int> A{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int k=6;
auto start = high_resolution_clock::now();
cout<<solve(A,k)<<endl;
auto stop = high_resolution_clock::now();
auto duration = duration_cast<milliseconds>(stop - start);
cout<<"Time(ms): "<<duration.count();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGU8YWxnb3JpdGhtPgojaW5jbHVkZTx1bm9yZGVyZWRfc2V0PgojaW5jbHVkZTx1bm9yZGVyZWRfbWFwPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2Ugc3RkOjpjaHJvbm87CiNkZWZpbmUgcGlpIHBhaXI8aW50LHBhaXI8aW50LGludD4+CiNkZWZpbmUgcGkgcGFpcjxpbnQsaW50PgojZGVmaW5lIE1BWFNJWkUgMTAwCiNkZWZpbmUgbGwgbG9uZyBsb25nCmNvbnN0IGludCBNT0QgPSAxZTkgKyA3Owpjb25zdCBpbnQgTUFYQklUID0gMzA7CmNvbnN0IGludCBJTkYgPSBJTlRfTUFYOwpjb25zdCBpbnQgTklORj0gSU5UX01JTjsKCnZvaWQgcHJpbnRBcnIoc3RyaW5nIHN0ciwgdmVjdG9yPGludD4gYXJyKXsKCWNvdXQ8PHN0cjw8ZW5kbDsKCWZvcihpbnQgdmFsOiBhcnIpCgkJY291dDw8dmFsPDwiICI7Cgljb3V0PDxlbmRsOwp9CgoKCi8qLS0tLVNUQVJUIENPRElORyBGUk9NIEhFUkUtLS0tLS0tKi8KCmludCBkZnMoaW50IGlkeCwgdmVjdG9yPGludD4gJnN1bSwgdmVjdG9yPGludD4gJkEsIGludCBrLCBpbnQgbWF4QnVja2V0U2l6ZSl7CglpbnQgbj0gQS5zaXplKCk7CglpZihpZHggPT0gbil7CgkJcmV0dXJuIDE7Cgl9CgoJLy90cnkgcGxhY2luZyBpbiBvbmUgb2YgdGhlIGt0aCBidWNrZXRzCglmb3IoaW50IGk9MDtpPGs7aSsrKXsKCQlpZihzdW1baV0gKyBBW2lkeF0gPiBtYXhCdWNrZXRTaXplKSBjb250aW51ZTsKCgkJc3VtW2ldKz0gQVtpZHhdOwoJCWludCByZXM9IGRmcyhpZHgrMSwgc3VtLCBBLCBrLCBtYXhCdWNrZXRTaXplKTsKCQlzdW1baV0tPSBBW2lkeF07CgoJCWlmKHJlcyA9PSAxKSByZXR1cm4gMTsvLyBzdWJzZXQgcG9zc2libGUgd2l0aCB0aGlzIG1heGJ1Y2tldFNpemUKCX0KCglyZXR1cm4gMDsKfTsKCmludCBzb2x2ZSh2ZWN0b3I8aW50PiBBLCBpbnQgayl7CglpbnQgbj1BLnNpemUoKTsKCXZlY3RvcjxpbnQ+IHN1bTEoaywwKTsKCglpbnQgbD0gKm1pbl9lbGVtZW50KEEuYmVnaW4oKSwgQS5lbmQoKSk7CglpbnQgcj0gYWNjdW11bGF0ZShBLmJlZ2luKCksQS5lbmQoKSwwKTsKCWludCBhbnM9LTE7CgoJd2hpbGUobDw9cil7CgkJaW50IG1pZD0gbCsoci1sKS8yOwoJCXZlY3RvcjxpbnQ+IHN1bShrLDApOwoKCQlpZihkZnMoMCxzdW0sQSxrLG1pZCkgPT0gMSl7CgkJCWFucz1taWQ7CgkJCXI9bWlkLTE7CgkJfWVsc2V7CgkJCWw9bWlkKzE7CgkJfQoJfQoKCXJldHVybiBhbnM7Cn0KCgppbnQgbWFpbigpIHsKICAgIHZlY3RvcjxpbnQ+IEF7MSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTB9OwogICAgaW50IGs9NjsKCiAgICBhdXRvIHN0YXJ0ID0gaGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKTsKICAgIGNvdXQ8PHNvbHZlKEEsayk8PGVuZGw7CiAgICBhdXRvIHN0b3AgPSBoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwoKCWF1dG8gZHVyYXRpb24gPSBkdXJhdGlvbl9jYXN0PG1pbGxpc2Vjb25kcz4oc3RvcCAtIHN0YXJ0KTsKICAJY291dDw8IlRpbWUobXMpOiAiPDxkdXJhdGlvbi5jb3VudCgpOwoKICAJcmV0dXJuIDA7Cn0=