POJ 3273:Monthly Expense(二分)
来源:互联网 发布:云平台软件销售协议 编辑:程序博客网 时间:2024/05/16 11:13
大致题意:
给出农夫在n天中每天的花费,要求把这n天分作m组,每组的天数必然是连续的,要求分得各组的花费之和应该尽可能地小,最后输出各组花费之和中的最大值。
题解:
做了这道题,我才深刻理解到上午学长讲二分时说的那么一句话啦。当给出条件,但直接求出答案不容易,验证答案很容易且答案区间已知是,二分区间验证答案是个很有效的策略!!!
那么这道题最终答案的区间就在[Max,sum]中(其中Max代表所有书中最大值,sum代表所有数求和)
下面就是AC的代码,要注意的就是一对区间的二分和答案的输出
#include <iostream>#include <stdio.h>#include <math.h>#include <cstring>#include <map>#include <set>#include <algorithm>#include <queue>#include <stack>using namespace std;int spend[100003];int main(){ int N,M,Max,sum,mid; while(scanf("%d%d",&N,&M)!=EOF){ scanf("%d",&spend[0]); Max=sum=spend[0]; for(int i=1;i<N;i++){ scanf("%d",&spend[i]); Max=max(Max,spend[i]); sum+=spend[i]; } while(Max<sum){ mid=(sum+Max)/2; int cnt=0,s=0; for(int j=0;j<N;j++){ s+=spend[j]; if(s>mid){ s=spend[j]; cnt++; } if(j==N-1) cnt++; } //cout<<mid<<" "<<cnt<<endl;; if(cnt>M) Max=mid+1; else sum=mid; } printf("%d\n",Max); } return 0;}
0 0
- poj 3273 二分 Monthly Expense
- poj 3273 二分 monthly expense
- poj-3273-Monthly Expense-二分
- POJ 3273 Monthly Expense(二分)
- POJ 3273 Monthly Expense(二分)
- poj 3273 Monthly Expense (二分)
- POJ 3273 Monthly Expense (二分)
- POJ - 3273 Monthly Expense 二分
- POJ 3273 Monthly Expense(二分)
- POJ 3273:Monthly Expense(二分)
- 【POJ 3273】 Monthly Expense (二分)
- poj 3273 Monthly Expense 【二分】
- poj 3273 Monthly Expense (二分)
- POJ 3273 Monthly Expense 二分
- POJ 3273 Monthly Expense(二分)
- 【poj 3273】 Monthly Expense 二分
- POJ - 3273 Monthly Expense(二分)
- POJ-3273 Monthly Expense(二分)
- pip安装包
- 统计1到n出现的1的个数(不能用字符串)
- Android Binder- 一次完整的通信过程
- 通用的简单Makefile之单文件单程序
- Selenium2(webdriver)入门之TestNG的安装与简单使用
- POJ 3273:Monthly Expense(二分)
- powerDesigner类图生成JAVA代码
- 股票学习12
- ios学习笔记 --(c语言基础4)
- [转]jQuery中$.fn的用法介绍
- testNg教程
- 一个简单RPC框架是如何炼成的(V)——引入传输层
- MFC学习笔记--静态编辑框内容获取和输出两种方式
- AlarmManager研究