UVA714给出n个数分成m个部分,使和最大的最小

该博客讨论了UVA714问题的解决方法,涉及二分搜索和贪心策略。作者最初尝试用二分法解决,但在实现中遇到问题,发现需要从数列末尾开始贪心选择,以确保和不超过二分查找的值。注意到二分搜索初始值的设定至关重要,不应设为0,而应设为数列的最大值,以避免错误的解决方案通过测试。
摘要由CSDN通过智能技术生成

这题,小白书上有讲,所以当时也没多想直接二分,分完之后,发现有问题,他说前面的尽量小,这里就要贪心,

从后面贪心,只要和值不大于二分的值就一直二分,然后发现还是不对,看了别人的,忽略了一个问题,二分的时候

x的初始值不能是零,因为我写的判断二分的函数比较特殊,所以如果判断的值小于全部的数也能过,所以,这里x的

初值注意取全部数的最大值。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<cmath>
#include<algorithm>
#include<string>
#include<map>
#include<queue>
#include<stack>
#include<set>
#include<vector>
#define LL long long
using namespace std;
const int maxn=1e4+10;
const double eps=1e-6;
int m,k;
int a[510];
int ca[1110];
bool solve(LL t)
{
	LL sum=0;
	int tem=k-1;
	for(int i=0;i<m;i++)
	{
		if(sum+a[i]>t)
		{
			sum=0;
			tem--;
		}
		if(tem<0)
		return 0;
		sum+=a[i];
	}
	return 1;
}
i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值