给你n个货物,k辆车,然后每个货物重Wi,问每个车最小装多重把货物全部运完.
然后注意货物是依次,所以只需要一个个装货物就行,这个车装不完直接给下一个车就行。然后注意right 和left c++里面有重名。
然后注意二分思想的利用,因为载重量p增加时,能装的货物v并不会减少。然后二分搜索答案范围内lef和righ里面的数,
#include<iostream>
#include<cstdio>
using namespace std;
long long ans,righ,lef,mid,v;int n,m; int s[100009];
int check(int p){ int cnt=0;
for(int j=0;j<m;j++){
int load=0;
while(load+s[cnt]<=p){
load+=s[cnt];cnt++;
if(cnt==n) return n;
}
}
return cnt;
}
int main(){ int i,j,k;cin>>n>>m;lef=0;righ=100000*10000;
for(i=0;i<n;i++){ scanf("%d",&s[i]);
}
while( righ - lef > 1){
mid=(righ+lef)/2;
v=check(mid);
if(v>=n) righ=mid;
else lef=mid;
}
cout<<righ<<endl;
return 0;}