POJ 3273Monthly Expense(二分答案)
2024-09-02 22:47:15
题目链接
思路如下
题意:这一题让我们在一个 n 个数的序列,分成连续的的 m个子串(一个数也可是一个子串),是在所有子串中 和最大的子串 的和最小.
思路:我们可以用 二分法 来一个一个枚举答案,二分的上限为: 序列中 n 个数之后。下限为:数列中最大的数,通过枚举一个数,看这个数是不是 答案,我们可以考虑:在 这个枚举的数字的基础上能不能把 m子串分割出来,能分割出来来我们调整答案的 下限,分割不出来 调整答案的 上限;
题解如下
#include<iostream>
#include<algorithm>
using namespace std;
const int Len = 1e5 + 5;
int ar[Len];
int m,n;
bool group(int mid)
{
int sum = 0;
int cnt = 1;
for(int i = 0; i < m; i ++)
{
if(sum + ar[i] <= mid)
{
sum += ar[i];
}
else
{
sum = ar[i];
cnt ++;
}
}
if(cnt > n)
return true;
else
return false;
}
void Binary_search(int l,int r)
{
int mid;
while(l <= r)
{
mid = (l + r) / 2;
if(group(mid))
{
l = mid + 1;
}
else
{
r = mid - 1;
}
}
printf("%d",mid);
}
int main()
{
//freopen("A.txt","r",stdin);
scanf("%d %d",&m,&n);
int sum = 0;
int mx = -1;
for(int i = 0; i < m; i ++)
{
scanf("%d",&ar[i]);
sum += ar[i];
mx = max(mx , ar[i]);
}
Binary_search(mx,sum);
return 0;
}
最新文章
- Asp.net页面引用SAP IQ 16 iAnywhere.Data.SQLAnywhere.V4.0.dll报错,语言文件没找到
- Debian下安装deb格式安装包
- shell条件与循环
- 泌尿系统 Excretory system
- C语言初学者代码中的常见错误与瑕疵(1)
- Java 集合深入理解(14):Map 概述
- sql compact 使用EF无法更新的问题?
- MySQL查询本周、上周、本月、上个月份数据的sql代码
- 使用tornado的gen.coroutine进行异步编程
- UI2_NSUserDefaults
- iOS10---新特性以及适配点(转)
- 第3章文件I/O总结
- 2000W条数据,加入全文检索的总结
- java中小数的处理:高精度运算用bigDecimal类,精度保留方法,即舍入方式的指定
- HTML中<;base>;标签的正确使用
- 在Coding上搭建Hexo个人博客
- 转:浅谈SimpleDateFormat的线程安全问题
- day17:递归函数
- MVC 第一章(下)
- Spring 中使用XML配置方式和使用注解方式实现DI