https://www.luogu.com.cn/record/108436781
#include<bits/stdc++.h>
using namespace std;
int n,k;
long long a[20],ans[100005],az;
long long f[1<<16],c[1<<16],res;
int ch(int x,int j){
int l=x,r=n;
while(l<r){
int mid=(l+r+1)/2;
if(ans[mid]-ans[x]<=a[j])l=mid;
else r=mid-1;
}
return l;
}
int main(){
scanf("%d%d",&k,&n);
for(int i=1;i<=k;i++)scanf("%lld",&a[i]),az+=a[i];
sort(a+1,a+1+k);
for(int i=1;i<=n;i++){
long long x;
scanf("%lld",&x);
ans[i]=ans[i-1]+x;
}
res=az+1;
for(int i=1;i<(1<<k);i++){
int x=k;
while((i&(1<<(x-1)))==0&&x)x--;
c[i]=a[x]+c[i-(1<<(x-1))];
for(int j=1;j<=x;j++)
if(i&(1<<(j-1))){
f[i]=ch(f[i-(1<<(j-1))],j);
if(f[i]==n)res=min(res,c[i]);
}
}
printf("%lld",az-res);
return 0;
}
蟹蟹泥 qwq