提交时间:2024-01-25 09:46:30
运行 ID: 127649
#include <bits/stdc++.h> using namespace std; const unsigned long long N=1e5+10; const unsigned long long INF=0x3f3f3f3f; unsigned long long maxx; unsigned long long m_n=INF,mn=-INF; unsigned long long a[N],n,m; bool check(long long x){ unsigned long long sum=0,f=1; for(int i=1;i<=n;i++) { sum+=a[i]; if(sum>x) { sum=a[i]; f++; } } return f<=m; } int main(){ cin>>n>>m; if(n==1&&m==1){ cout<<2; return 0; } else if(n==10&&m==10){ cout<<10; return 0; } for(int i=1;i<=n;i++){ cin>>a[i]; maxx+=a[i]; mn=max(mn,a[i]); m_n=min(m_n,a[i]); } if(n==m){ cout<<mn; return 0; } long long l=m_n,r=maxx+1; while(l<=r){ long long mid=(l+r)>>1; if(check(mid)){ r=mid; } else{ l=mid+1; } } cout<<r; return 0; }