这题,小白书上有讲,所以当时也没多想直接二分,分完之后,发现有问题,他说前面的尽量小,这里就要贪心,
从后面贪心,只要和值不大于二分的值就一直二分,然后发现还是不对,看了别人的,忽略了一个问题,二分的时候
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;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>m>>k;
LL x=0,y=0;
for(int i=0;i<m;i++)
{
scanf("%d",&a[i]);
x=max(x,(LL)a

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

被折叠的 条评论
为什么被折叠?



