开始预习二分法啦~二分法练习1

poj3273 Monthly Expense (二分,最大值最小化)

题意:将N个账款分割成M个财务期,使得每个分期账款和的最大值最小。

题解:贪心思想,二分法。上界为N天花费总和,下界为每天花费的最大值。根据mid值遍历n天花费看是否满足M各财务期条件

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int main(){
 5     int n,m,i,cnt,a[100001],ma=0,s=0;
 6     scanf("%d%d",&n,&m);
 7     for(i=0;i<n;++i){
 8         scanf("%d",&a[i]);
 9         ma=max(a[i],ma);
10         s+=a[i];
11     }
12     int l=ma,r=s,mid;
13     while(l<r){
14         mid=(l+r)>>1;
15         cnt=1;
16         for(s=i=0;i<n;++i){
17             s+=a[i];
18             if(s>mid){cnt++;s=a[i];}
19         }
20         if(cnt<=m) r=mid;
21         else l=mid+1;
22     }
23     printf("%d\n",l);
24     return 0;
25 }
Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-10
  • 2021-10-21
  • 2021-08-14
  • 2021-09-22
  • 2022-02-07
猜你喜欢
  • 2021-12-17
  • 2021-10-01
  • 2021-12-15
  • 2021-06-04
  • 2021-11-09
  • 2021-04-10
相关资源
相似解决方案