POJ 3273 二分
2013-01-05 21:53
267 查看
/* 题意: 给你天数N(1 ≤ N ≤ 100,000),和每天需要花的钱(存放在数组中), 让你把这些天分成M(1 ≤ M ≤ N)份(每份都是连续的天), 要求每份的和最大值尽量小,输出这个和。 分析:二分,用最大money[]为左端点,money[]总和为右端点...要求的结果一定 在该范围内.. 所以要求mid的最优值 时间复杂度为:n*lg(n)... */ #include<iostream> #include<algorithm> #define manx 100009 using namespace std; int n,m; /// 天数,人数 int money[manx]; /// bool judge(int mid){ /// 判断 mid 值是否符合条件 int sum=0,ans=1; for(int i=1;i<=n;i++){ if(sum+money[i]<=mid) sum+=money[i]; else { sum=money[i]; ans++; } } // cout<<ans<<endl; if(ans>m) return false; else return true; } int main(){ while(cin>>n>>m){ int right=0,left=0; for(int i=1;i<=n;i++){ scanf("%d",&money[i]); if(money[i]>left) left=money[i]; right += money[i]; } int mid=(left+right)>>1; while(left<right){ // cout<<left<<" "<<mid<<" "<<right<<" "; if(!judge(mid)) left=mid+1; /// mid 偏小 else right=mid-1; /// mid 偏大 mid=(left+right)>>1; // system("pause"); } cout<<mid<<endl; } } /* 7 4 100 400 300 100 500 101 400 */
相关文章推荐
- POJ 3273-Monthly Expense(二分求最小和中的最大)
- POJ 3273 Monthly Expense (二分答案)
- POJ 3273 USACO 2007 Mar Monthly Expense 二分答案
- 【poj 3273】 Monthly Expense 二分
- POJ 3273 (二分)
- poj 3273- Monthly Expense(最大值最小化)-二分
- POJ3273 Monthly Expense 二分
- poj 3273 Monthly Expense (二分)
- POJ 3273 Monthly Expense(二分枚举)
- poj3273(二分枚举)
- POJ3273 二分
- (Relax 数论1.20)POJ 3273 Monthly Expense(经典二分)
- POJ 3273 Monthly Expense(二分)
- poj 3273(二分)
- poj3273 二分
- poj 3273 Monthly Expense(二分穷举)
- poj_3273 Monthly Expense(二分穷举)
- poj 3273 Monthly Expense (二分)
- poj 3273/1064/2456 二分答案(Monthly Expense)
- poj3273 Monthly Expense(二分)