贪心算法之——摘枇杷(nyoj680)(贪心+二分搜索)

二分+贪心(总结) 最近做了几道二分+贪心的题目,做下总结 基本思路:通过二分,将范围逐步缩小,直到最优解 1、poj2456 /* 题意: 有n个牛栏,选m个放进牛,相当于一条线段上有 n 个点,选取 m 个点, 使得相邻点之间的最小距离值最大 思路:贪心+二分 二分枚举相邻两牛的间距,判断大于等于此间距下能否放进所有的牛。 */ #include #include #include 阅读详情

问题:

摘枇杷

时间限制:2000 ms  |  内存限制:65535 KB
难度:3
描述

理工学院的枇杷快熟了,ok,大家都懂得。而且大家都知道,学校的枇杷树都是一列一列的。现在小Y同学已经在筹划怎么摘枇杷了。现在我们假设有一列枇杷树,而且每棵枇杷树上枇杷果的数量小Y都已经知道了。

假设现在有n棵枇杷树,小Y可以把这n棵枇杷树分成m组,每组枇杷果的数量是这组内每棵枇杷树上枇杷果数量的和。注意,每组的枇杷树必须是连续的。(每组最少1棵树,最多n棵树)。小Y把枇杷往寝室拿的时候是一组一组拿的,所花费的力气等于这m组中枇杷果最多的那组枇杷果的数量。现在小Y想花尽量少的力气把这些枇杷果拿回寝室。

输入
多组测试数据,以EOF结束(<= 100组)
每组测试数据第一行有两个数n(n <= 1000)和m(1 <=m <= n)
第二行有n个数,分别代表每颗树上枇杷果的数量
输出
输出小Y同学所花费的最小的力气,每个结果占一行。
样例输入
3 2
1 2 3
7 5
1 4 3 1 5 2 4
样例输出
3
5

分析:

这是一个最大值最小化的问题。

当m==1时,result==sum==a[0]+a[1]+a[2]+……+a[n-1]

当m==n时,result==max(a[]) (数组中的最大值)

当m>1&&m<n时,我们就可以通过二分搜索从max(a[]) ~ sum中枚举出m组时的最小值


代码:

#include <stdio.h>
#include <string.h>
int n, m, a[1005], sum, Max;
bool judge(int x)
{
	int s=0,count=0;
	for(int i=0; i<n; i++)
	if(s+a[i]>x)
	{
		count++;
		s=a[i];
		if(count>m-1) //当count==m时,而i<n, 则当每次运送x时,m组内运不完 
			return false;
	}
	else
		s += a[i];
	return true;	//每次运送x时,m组内就能运完 
}
int get_ans()
{
	int l=Max, r=sum; //n==m时,最大为Max,当m==1时,最大为sum 
	while(l<=r)
	{
		int mid = (l+r)/2;
		if(judge(mid)) r = mid-1;
		else l = mid+1;
	}
	return l;	//当从while中退出时,最后一次操作是r=mid-1,原本的l<=r不再满足 ,所以l才是所要求的值 
}
int main()
{
	while(~scanf("%d%d", &n, &m))
	{
		memset(a,0,sizeof(a));
		Max=0; sum=0;
		for(int i=0; i<n; i++)
		{
			scanf("%d", &a[i]);
			sum += a[i];
			Max = Max>a[i]?Max:a[i];
		}
		printf("%d\n", get_ans());
	} 
	return 0;
}





【网络图】:附Origin详细画图教程 网络图,是一种由节点(或顶点)和连接这些节点的边(或链路)组成的图形结构。在网络图中,节点通常代表系统中的一个实体(如项目中的一项任务、通信网络中的一个设备、或运输网络中的一个站点),而边则代表这些实体之间的直接联系或流动(如任务的先后顺序、数据的传输路径、或乘客的旅行路线)。 有向图:如果边具有方向性,即从一个节点指向另一个节点,则称为有向图。这种图常用于表示具有明确先后顺序或方向性的系统,如项目管理中的任务依赖关系。 无向图:如果图中的边没有方向,则称为无向图。它适用于表示实体间相互关联但无明确方向性的 阅读详情

相关推荐

unity制作交互视频/互动视频

unity制作交互视频/互动视频 思路 1.先让unity播放视频 2. 视频播放结束后,视频暂停,按钮出现 3.按钮跳转下一个视频 视频播放 先创建UI-Raw Iamge 在Raw Iamge 挂载组件 Video Player 接着挂载视频播放的脚本 using UnityEngine; using UnityEngine.UI; using UnityEngine.Video; publi...

weixin_45588911的博客 8425

第二节——二分 + 贪心

二分查找和贪心算法是解决算法问题的有力工具。通过将这两种算法结合起来,我们可以更有效地解决问题。希望本文能帮助你更好地理解这两种算法的结合使用。

lj222225536的博客 901

中国大学MOOC-翁恺-C语言程序设计习题集-解答汇总

中国大学MOOC-翁恺-C语言程序设计习题集 PAT 习题集 02-0. 整数四则运算(10) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 乔林(清华大学) 本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。 输入格式: 输入在一行中给出2...

weixin_30691871的博客 3万+

6.二分+贪心

6.二分+贪心二分查找贪心算法练习进击的奶牛 (二分)洛谷P1824A - Trailing Zeroes (III)(判断n!末尾0的个数⭐⭐)(二分)B - Strange fuction(二分)C - Pie(二分)⭐⭐D - Best Cow Line(贪心)E - The Frog's Games(二分)F - 湫湫系列故事——消灭兔子(贪心+运算符重载)⭐⭐G - pairs 二分查找 二分查找的基本思想: 将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x

qq_52008247的博客 5673

群晖NAS从入门到精通的所有帖子汇总,只要这一篇就够了

本站陆陆续续的转载、原创帖子也有十几二十篇了,从不同的角度对群晖NAS的各种骚操作都有深入的讲解,虽然很多文章都不是讲的很深入,但是针对小白入门已经是足够了,希望对小白来说是一个入门,群晖NAS的大佬们勿喷,哪里写的不对的,请随时留言西安SEO优化站长一定在第一时间纠正修改。

西安SEO优化网站资源 8万+

C#实战:基于ONNX与SCRFD/ArcFace的高效人脸识别系统开发

本文详细介绍了如何在C#环境中,利用ONNX Runtime高效部署SCRFD人脸检测与ArcFace人脸识别模型,构建一个完整的、高性能的人脸识别系统。内容涵盖环境搭建、模型推理、人脸对齐、特征提取等核心模块,并提供了从Demo到生产系统的优化思路与实战代码,为.NET开发者提供了一套开箱即用的解决方案。

weixin_29061821的博客 488

最长上升子序列(二)(贪心+二分)

每日一题 题目字符串计数n最长上升子序列(二) 字符串计数 题目链接 题目描述: 求字典序在 s1 和 s2 之间的,长度在 len1 到 len2 的字符串的个数,结果 mod 1000007。数据范围:s1(长度小于50),s2(长度小于50),len1(小于50),len2(大于len1,小于50) 注意:本题有多组输入 输入: 每组数据包涵s1(长度小于50),s2(长度小于50),len1(小于50),len2(大于len1,小于50) ab ce 1 2 输出: 56 思路: 由于由题意得

qq_41420788的博客 384

【亲测有效】OpenClaw Gateway 出现 “(no output)“ 卡死问题完整解决指南:从手动重启到 systemd Watchdog 自动恢复

最近在使用 OpenClaw(自托管 AI 助手框架,前身 Clawdbot/Moltbot)时,遇到了一个非常常见的顽疾:TUI(终端界面)或 Telegram 等通道经常显示 "(no output)",消息发出去后机器人完全没反应,看起来像是卡死了。

hampeter的博客 8609

贪心算法:分组(贪心+二分)

遇到当前数字a【i】就二分各个组别的最大值,如果能搜到组别最大值为a【i】-1,那么就更新那个组的最大值,并且人数+1,如果找不到就新建一个组别,使这个组别最大值为a【i】,人数为1。关键是每次二分都要找到最后一个符合条件的值,因为最大值相同的情况下,后面的组别人数一定是比前面的组别人数少的,所以我们把符合条件的值放到后面的组别可以维护整体的平衡。题解是首先将整个a数组排升序,那么遇到相同的数字的情况就可以开新的组别,保存每个组别的最大值以及各个组别的人数大小,a数组排序就是为了让组别最大值也是升序的。

chkQAQ的博客 468

Autosar MCAL-S32K324 Fee配置-基于EB

Autosar MCAL S32K324 Fee配置详解

赞的博客 1545

使用verilog设计实现QR分解

QR(正交三角)分解法是求一般矩阵全部特征值的最有效并广泛应用的方法,一般矩阵先经过正交相似变化成为Hessenberg矩阵,然后再应用QR方法求特征值和特征向量。 使用verilog对QR实现方法进行设计并进行功能仿真: 如下: 顶层模块代码: module TOP( H1R, H1I, H2R, H2I, H3R, H3I, H4R, H4I, clk, rst_n, Y1R, Y1I, Y2R, Y2I, X1R, X1I, X2R, X2I ); parameter width = 16; // I

QQ_778132974的博客 2150

二分+贪心解题

P2678 [NOIP2015 提高组] 跳石头https://www.luogu.com.cn/problem/P2678 本题使用二分+贪心的方法来解决。首先是二分的模板: while (l <= r) { int mid = l + r >> 1; if (check(mid) == true) { ans = mid; l = mid + 1; } else { r = mid - 1; } } 然后再通过贪心,求出搬走石.

Bookerbobo的博客 840

2025华为杯第二十二届中国研究生数学建模竞赛D题:低空湍流监测及最优航路规划 - 完整解题分析+完整MATLAB源码!(上篇)

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 2587

NYOJ 680 摘枇杷

NYOJ 680 摘枇杷

倚世独殇 823

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

NYOJ 680 摘枇杷(二分搜索+贪心)

摘枇杷 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 理工学院的枇杷快熟了,ok,大家都懂得。而且大家都知道,学校的枇杷树都是一列一列的。现在小Y同学已经在筹划怎么摘枇杷了。现在我们假设有一列枇杷树,而且每棵枇杷树上枇杷果的数量小Y都已经知道了。 假设现在有n棵枇杷树,小Y可以把这n棵枇杷树分成m组,每组枇杷果的数量是这组内每棵

LYHVOYAGE的专栏 1614

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

nyoj-680(摘枇杷) 贪心 + 二分

题意比较明确:求n棵树

风儿-zsj的专栏 677

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

nyoj 680 摘枇杷(二分+贪心)

摘枇杷 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 理工学院的枇杷快熟了,ok,大家都懂得。而且大家都知道,学校的枇杷树都是一列一列的。现在小Y同学已经在筹划怎么摘枇杷了。现在我们假设有一列枇杷树,而且每棵枇杷树上枇杷果的数量小Y都已经知道了。 假设现在有n棵枇杷树,小Y可以把这n棵枇杷树分成m组,每组枇杷果的数量是这组内每棵

hexianhao的博客 487

nyoj680摘枇杷

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=680 或者:http://115.159.40.116/problem_show.php?pid=5264 题目大意就是将n个数组成的一列,分成m份,使m份中最大的那份中所有数的和尽量小,如下例: n=7 m=5 数据为: 1 4 3 1 5 2 4 答案: 5 分

小k的博客 1608

二分+贪心:最大化最小值+最小化最大值

Problem Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,…,xN (0 <= xi <= 1,000,000,000). His C (2 <= C <= N) cows don’t like this barn layo

qq_46231566的博客 703

贪心算法——洛谷(P1478)陶陶摘苹果

我们看一下,在这个题里,所有苹果费力气也就是占背包空间不同,但是价值都是1。背包问题主要是为了解决拿得多却不一定价值最大,拿价值大的却可能装不下其他有价值的东西而使人陷入两难才被发明的算法。对于价值相同体积却不同的物品,我们每次只取体积最小的,不就能在取得当前价值的情况下,最大化剩余空间,从而拿更多苹果了吗? 讲到这里,大家可能就有点明白贪心算法的适用范围了。我之所以先引例,就是因为下面这段话实在有点晦涩难懂:

青春无问西东 岁月自成芳华 6231

贪心+二分答案

(贪心+整数型二分答案) 题目常包含:“最短的最大距离”,“最大的最短距离” 1.计网 2.洛谷P1824进击的奶牛 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> using nam...

weixin_30887919的博客 352

贪心加二分

贪心加二分 题目 K - Video Reviews Gym - 101755K 最少需要m个,二分可以加快速度,假设可以说服m/2个人就可以,如果不行,说明要说服的人在m/2-m之间,如果可以吧m/2当做m在进行操作 #include <iostream> #include <algorithm> #include <cstdio> #include <...

qq_44149604的博客 296

nylgacm_1057_寻找最大数(三)

描述 给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数。 求这个新的整数的最大值是多少。 输入 多组测试数据。 每组测试数据占一行,每行有两个数N和K (1 ≤ N≤ 10^18; 0 ≤ K ≤ 100). 输出 每组测试数据的输出占一行,输出移动后得到的新的整数的最大值。 样例输入 1990 1 100 0 9090000078001234 6...

君只见独不见的专栏 1056

2018ICPC青岛区域赛 zoj4062 Plants vs. Zombies

2018ICPC青岛区域赛 zoj4062 Plants vs. Zombies   BaoBao and DreamGrid are playing the gamePlants vs. Zombies. In the game, DreamGrid grows plants to defend his garden against Bao...

Albert_Liuzw的博客 431

贪心+二分

疯牛 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述农夫 John 建造了一座很长的畜栏,它包括N (2 但是,John的C (2 输入有多组测试数据,以EOF结束。 第一行:空格分隔的两个整数N和C 第二行——第N+1行:分别指出了xi的位置 输出每组测试数据输出一个整数,满足题意的最大的最小值,注意换行。 样例输入

GSD_liu的博客 657

贪心 + 二分

链接:http://vjudge.net/contest/143819#problem/B CodeForces 363D 题意:n个人每个人有b[i] 块钱,他们每人都要租一辆车。一共有m辆车等待被租,租每辆车都需要p[i]块钱。此外他们还共享a块钱。每个人的钱都只能买自己的车,如果有剩下的钱也不能给别人用。最多能有多少个人租到车,问这些买到车的人最少要花多少钱。 解析:二分找最多有多

AI_xue 652
上一篇: 数据结构(严蔚敏)之五——循环队列(c语言实现)
下一篇: 图论之——单词拼接(nyoj99)(欧拉图+回溯)
君只见独不见
博客等级 码龄12年 99粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值