poj 3273 Monthly Expense

系统 1482 0
    
      
        http://poj.org/problem?id=3273
      
      
给你每天的花费,让你分成m组 要求各组的和中的最大值越小越好
二分查找
      
        
          #include<iostream> using namespace std; const int N=100001; int n,m; bool toosmall(int k,int money[]) { int count=1;//k吧花费分成的组数,开始为一组 int sum=0; for(int i=1;i<=n;++i) { if(sum+money[i]>k)//如果超过k 应增加一组,所以count加一 sum更新重计 { sum=money[i]; ++count; } else { sum=sum+money[i]; } } if(count>m)//组数太多说明mid太小 return true; return false; } int main() { while(cin>>n>>m) { int money[N]; int high,low; high=0;//上界 low=0;//下界 for(int i=1;i<=n;++i) { cin>>money[i]; low=max(low,money[i]);//最大的那个为下界 high=high+money[i];//和为上界 } int mid=(high+low)/2; while(low<high) { if(toosmall(mid,money))//如果mid太小 { low=mid+1; } else//mid太大 或者正好 { high=mid; } mid=(high+low)/2; } cout<<mid<<endl; } return 0; }
        
      
    

 

poj 3273 Monthly Expense


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论