【POJ 3273】 Monthly Expense (二分)
生活随笔
收集整理的這篇文章主要介紹了
【POJ 3273】 Monthly Expense (二分)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【POJ 3273】 Monthly Expense (二分)
一個(gè)農(nóng)民有塊地 他列了個(gè)計(jì)劃表 每天要花多少錢管理 但他想用m個(gè)月來管理 就想把這個(gè)計(jì)劃表切割成m個(gè)月來完畢 想知道每一個(gè)月最少花費(fèi)多少 每一個(gè)月的花費(fèi)是這個(gè)月的花費(fèi)加和 必須按計(jì)劃表的順序來
全部天中花費(fèi)中最大花費(fèi)作為下界 全部花費(fèi)加和作為上界 二分上下界間的花費(fèi)可能 找出最少每月花費(fèi)就可以
代碼例如以下:
#include <iostream> #include <cstdio>using namespace std;int ned[100000],n,m;bool can(int x)//推斷是否可行 {int i,sum = 0,cnt = 1;for(i = 0; i < n; ++i){sum += ned[i];if(sum > x)//加上這天后此劃分超過x 割開{sum = ned[i];cnt++;}}if(cnt > m) return false;//劃分塊數(shù)>m 不可行return true; }int main() {//freopen("in.in","r",stdin);int l,r,i,mid,ans;scanf("%d %d",&n,&m);r = l = 0;for(i = 0; i < n; ++i){scanf("%d",&ned[i]);r += ned[i];l = max(l,ned[i]);}while(l <= r){mid = (l+r)>>1;if(can(mid)) //可按mid劃分的時(shí)候 此題數(shù)據(jù)真水 開始二分寫挫了 還過了 3 2 4 4 4這組就能卡掉{ans = mid;r = mid-1;}else l = mid+1;}printf("%d\n",ans);return 0; }
轉(zhuǎn)載于:https://www.cnblogs.com/lxjshuju/p/7066545.html
總結(jié)
以上是生活随笔為你收集整理的【POJ 3273】 Monthly Expense (二分)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微赞开发有感
- 下一篇: KalamundaPerthWester