(1544): 序列划分(求极大值的最小值)&(1233): 【基础算法】 书的复制

求序列的最大最小值 单求最大或最小值需要遍历整个序列,复杂度O(n)。 当同时求最大和最小值时,可以将序列的每一对相邻元素先做比较,然后与当前的最大值最小值进行比较,来决定是否更新。这样每两个元素之间需要3次比较。 代码如下: // maxmin.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include #include 阅读详情

为什么要把这两道题放到一起写呢?就是因为这两道题很像很像只有输不输出方案的区别~

不信把两道题目一起放出来!!

 

问题 B(1544): 序列划分(求极大值的最小值)

时间限制: 1 Sec  内存限制: 64 MB

题目描述

把一个包含n个正整数的序列划分为m个连续的子序列(子序列不能重叠)。设第i个序列的各数之和为S(i),你的任务是让所有S(i)的极大值尽量小。例如序列1 2 3 2 5 4划分为3个序列的最优方案为123|25|4,其中S(1),S(2),S(3)分别为6,7,4,极大值为7;如果划分为12|32|54,则极大值为9,不如刚才的好。N<1000000,所有数的和不超过10^9.

输入

输入数据: 第一行:两个正整数n,m。 第二行:n个正整数,表示该序列。

输出

输出数据: 最小的极大序列和

样例输入

 

Copy (如果复制到控制台无换行,可以先粘贴到文本编辑器,再复制)

6 3
1 2 3 2 5 4

样例输出

7

提示

 

提示: 序列1 2 3 2 5 4划分为3个序列的最优方案为123|25|4,其中S(1),S(2),S(3)分别为6,7,4,极大值为7。其他的方案得到的极大值都大于7.所以输出7.

问题 D(1233): 【基础算法】 书的复制

时间限制: 1 Sec  内存限制: 64 MB

题目描述

现在要把m本有顺序的书分给k给人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三、第四本书给同一个人抄写。 现在请你设计一种方案,使得复制时间最短。复制时间为抄写页数最多的人用去的时间。

输入

第一行两个整数m,k;(k≤m≤500) 第二行m个整数,第i个整数表示第i本书的页数。

输出

共k行,每行两个整数,第i行表示第i个人抄写的书的起始编号和终止编号。k行的起始编号应该从小到大排列,如果有多解,则尽可能让前面的人少抄写。

样例输入

Copy (如果复制到控制台无换行,可以先粘贴到文本编辑器,再复制)

9 3
1 2 3 4 5 6 7 8 9

样例输出

1 5
6 7
8 9

 

这就是hin典型的二分答案的题~2~1嘛~

BUT!!!!!what is erfen??

所谓二分,就是把一个区间对折对折再对折~~

这样做的前提,就是你可以知道对折后该走哪一边~~

算了直接给你们领略一下代码~

 

#include<cstdio>
int n,m,a[1000005],s;
int sc(int bg,int ed)
{
    if(bg==ed) return bg;
    int mid=(bg+ed)/2;
    int i,j=1,k=0,f=0;
    for(i=n;i>=1;i--)
    {
        if(a[i]>mid)
        {
            f=1;break;
        }
        if(k+a[i]>mid)
        {
            j++;
            k=0;
        }
        if(j>m)
        {
            f=1;break;
        }
        k+=a[i];
    }
    if(f) return sc(mid+1,ed);
    else return sc(bg,mid);
}
int main()
{
    int i;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        s+=a[i];
    }
    printf("%d",sc(0,s));
}
/**************************************************************
    Problem: 1544
    User: C20172037dza
    Language: C++
    Result: 正确
    Time:290 ms
    Memory:4936 kb
****************************************************************/

 

#include<cstdio>
#include<cstring>
int n,m,a[505],s,p[505],q[505],p1[505],q1[505];
void sc(int bg,int ed)
{
    int mid=(bg+ed)/2;
    int i,j,k=0;
    q1[1]=n;
    for(i=n,j=1;i>=1&&j<=m&&a[i]<=mid;i--)
    {
        if(k+a[i]>mid)
        {
            p1[j]=i+1;
            q1[j+1]=i;
            j++;
            k=0;
        }
        k+=a[i];
    }
    p1[m]=1;
    if(bg==ed) 
    {
        memcpy(p,p1,sizeof(p1));
        memcpy(q,q1,sizeof(q1));
        return;
    }
    if(j>m||a[i]>mid) sc(mid+1,ed);
    else sc(bg,mid);
}
int main()
{
    int i;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        s+=a[i];
    }
    sc(0,s);
    for(i=m;i>0;i--)
        printf("%d %d\n",p[i],q[i]);
}
/**************************************************************
    Problem: 1233
    User: C20172037dza
    Language: C++
    Result: 正确
    Time:0 ms
    Memory:1040 kb
****************************************************************/


你们会发现,我只把输出方案的部分添加了,别的动了很少~~

 

话说我做1544的时候没有判断

 

	if(a[i]>mid)
        {
            f=1;break;
        }if(a[i]>mid)
        {
            f=1;break;
        }


于是hin华丽地WA了= =真t是m愉d快啊..

 

我也是在单步调试的时候发现的这个问题..

简直了..pen pineapple apple pen

果然还是要多测几组数据,不能过个样例就屁颠屁颠去提交= =

然后1233就是说如果多解就让前面的人少抄就是让后面的多抄嘛~~

然后二分能不能取mid要慎重考虑!!慎重考虑!!慎重考虑!!

剩下的等我AC再说...

数据结构——最大值最小化 (划分子序列) 第一次写博客,就把第一篇文章给今天在sicily 阅读详情

相关推荐

最大值最小化

挺有意思的小题目 题目描述 把一个包含n个正整数的序列划分成m个连续的子序列(每个正整数恰好属于一个序列)。设第i个序列的各个数之和为S(i),你的任务是让所有S(i)的最大值尽量小。 例如序列1 2 3 2 5 4 划分成3个序列的最优方案为 1 2 3 | 2 5 | 4,其中S(1)、S(2)、S(3)分别为6、7、4,最大值是7; 如果划分成1 2 | 3 2 | 5 4,则最大值为9,不如刚才的好。n&lt;=10^6,所有数之和不超过10 ^ 9。 思路 “最大值尽量小”是一种很常见的优化目标。

mycocoo的博客 439

二分搜索之 最大值最小化问题

题面描述: 把一个包含n个正整数的序列划分成m个连续的子序列。设第i个序列的各数之和为S(i),求所有S(i)的最大值最小是多少? 例如,序列[1,2,3,2,5,4]划分为3个子序列的最优方案为[1,2,3],[2,5],[4],其中S(1),S(2),S(3)分别为6,7,4,那么最大值为7;如果划分为[1,2],[3,2],[5,4],则最大值为9,不是最小。 输入: 第一行:两个整数,分别为n,m。 第二行:n个正整数,表示该序列。 输出: 只输出一个整数,表示最小的子序列和。 Sa

m0_59010789的博客 414

最大值最小化问题——分治

问题描述: 把一个包含n个正整数的序列划分成m个连续的子序列。设第i个序列的各数之和为S(i),求所有S(i)的最大值最小是多少? 例如序列1 2 3 2 5 4划分为3个子序列的最优方案为 1 2 3 | 2 5 | 4,其中S(1),S(2),S(3)分别为6,7,4,那么最大值为7; 如果划分为 1 2 | 3 2 | 5 4,则最大值为9,不是最小。 把一个包

stary_yan的博客 3229

基础算法--二分法(最大值最小化)

题目描述 有一个序列{2,2,3,4,5,1},将其划分成3个连续的子序列S(1)、S(2)、S(3),每个子序列最少有一个元素,要求使得每个子序列的和的最大值最小 输入 6 2 2 3 4 5 1 输出 7 代码 来自:大佬传送门 #include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; #defin...

qq_40314362的博客 1494

序列划分(正)

题目 总工程师 题目描述 有M个软件工程师正在完成一个大型软件,需要开发若干个组件。 已知完成每个组件的开发时间保存在一个数组A里面,每个工程师只能独立完成连续的组件, 并且所有的工程师都是并行工作, 请输出完成这个软件需要的最少时间 输入说明 程序从当前路径下的data.txt文件中读取测试数据。 第一行会有1个数值,表示M 第二行则是A数组,元素之间以空格隔开 输出说明 向...

zero4eva的专栏 900

华为4-22笔试——子序列最小和的最大值排列

一个序列 m个数,分成k个子序列,S[i]表示第i个子序列的和。要使S[i]的最小值尽可能大;S[i]的最小值相同时,按照S[0]最小、S[1]最小排列,输出第一个 样例1 输入:6 3 1 2 3 2 5 4 输出:1 2 3 / 2 5 / 4 样例2 输入:9 3 100 200 300 400 500 600 700 800 900 输出:100 200 300 400 500 / 600...

1128

序列划分(二分法)——最大值最小化

一个序列的子序列,他的最大值可能的区间为——最小情况:序列的单个元素的最大值(即只把一个元素划分为一个子序列),最大情况:序列的所有元素的总和(即把所有元素划分为一个子序列)。返回的cut值为2,表明只分成了两个子序列,比三个子序列小,说明最大值选择过大,将右区间缩小为11,再次寻找新区间的中间的值。我们还是以序列{2,2,3,4,5,1}为例,当传入的最大值为11时,故区间就为 : [max,sum];二分查找的目的,就是为了更快的查找到。(这里很绕,多去理解一下)。

m0_74375748的博客 2599

动态规划 划分最小和

把一个包含n个正整数的序列划分成m个连续的子序列,每个整数刚好属于一个序列。设第i个序列的各数之和是S(i)。要求:让所有的S(i)的最大值尽量小。例如:序列1,2,3,2,5,4划分成3个序列的最优方案为123|25|4,其中S(1)=6,S(2)=7,S(3)=4。如果划分成12|32|54,则最大的S(i)=9,不是最优。其中n&lt;10^6, 所有数之和不超过10^9 本下载资源为一个实验报告,包括问题的解析和代码,代码亲测在VC6.0上可以运行,请放心下载

序列划分-使其最大值最小化

问题:给指定的序列划分为3份,取每份的最大值,再从3份最大值取出最大的max。如何划分,可以使max最小?输入:1,2,3,4,5划分:1,2,3 | 4 |5最大值为6思路:两个指针p1,p2,p1索引∈[0,len-2),p2索引∈[p1+1,len-1),最后一份索引范围[p2+1,len-1]实现:Array.prototype.sum = function(i,j){ i = i == ...

mybwu_com的专栏 872

【GPT】Coze使用开放平台接口-【7】Dify 比较篇

coze 用于社交,dify 用来内部构建。抛开工作流,机器人,工具,coze 最大的区别在于可以直接发布到社交媒体上。所以,coze 对操作体验上也花了不少功夫,而 dify 就专注在帮助使用者打磨工作流。coze 各个大模块之前可以联动的机制也比较多,所以侧重点各不相同。

非晓为骁的博客 7613

别再死记硬背MAML原理了!用PyTorch手撸一个Omniglot小样本分类器(附完整代码)

本文详细介绍了如何使用PyTorch实现MAML(模型无关的元学习)算法,构建一个Omniglot小样本分类器。通过实战代码演示,帮助读者理解MAML的双层优化原理,并提供了完整的训练循环、网络架构设计及调试技巧,适合想要掌握元学习技术的开发者。

weixin_29191669的博客 131

把一个包含m个正整数的序列划分成k个(1≤k≤m≤500)非空的连续子序列,使得每个正整数恰好属于一个序列。设第i个序列的各数之和为S(i),你的任务是让所有S(i)的最大值尽量小。例如,序列1 2

#include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;string&gt; #include&lt;algorithm&gt; using namespace std; typedef long long ll; const int size = 500 + 5; int n, k, a[size]; bool is[size]; i...

ght1994119的博客 2213

主流仿真软件Sigrity/HFSS/Siwave/Hyperlynx/ADS差异

在电子设计自动化(EDA)领域,各种仿真软件如Cadence Sigrity、Mentor Graphics的HyperLynx、Keysight的ADS以及ANSYS的SIwave等,都广泛应用于不同的应用场景中。综上所述,这些EDA仿真软件在各自的应用场景中发挥着重要作用,帮助工程师在设计阶段就能够评估和优化电子产品的性能,提高设计的可靠性和效率。:Sigrity由全球最大的EDA公司Cadence推出,Cadence还推出了Orcad和Allegro等著名软件。:由安捷伦(现是德科技)公司开发。

Geektec的专栏 9402

题目1544:数字序列区间最小值

题目1544:数字序列区间最小值 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: 给定一个数字序列,查询任意给定区间内数字的最小值。 输入: 输入包含多组测试用例,每组测试用例的开头为一个整数n(1&lt;=n&lt;=100000),代表数字序列的长度。接下去一行给出n个数字,代表数字序列。数字在int范围内。下一行为一个整数t(1&lt;=t&...

weixin_33895475的博客 274

Android系统开发工程师面试指南与参考答案

本文整理了Android系统开发工程师面试常见问题与参考答案。核心内容涵盖:1)Framework层定制方法,如修改HAL和系统服务;2)ANR问题分析工具(systrace)与解决方案;3)性能优化实践,包括开机加速和功耗管理;4)四大组件工作机制与应用案例;5)Native崩溃调试技巧。文章强调通过AOSP源码研究、工具使用和项目案例准备来提升面试表现,重点考察应聘者的系统开发深度和实操能力。参考答案均基于实际开发经验,提供可量化的优化成果说明。

郑伟强dev的专栏 256

74、光谱成像在电子内窥镜及色彩理论中的应用

本文探讨了光谱成像在电子内窥镜中的应用及其与色彩理论的深度融合。通过分析FICE技术、色彩再现模型及胃黏膜光谱测量,展示了光谱信息在提升医学诊断准确性方面的潜力。同时,系统阐述了颜色的物理属性、标准表示方法、同色异谱现象、颜色测量技术(密度法与比色法)以及CIELAB等均匀颜色空间的构建原理。结合流程图与对比表格,梳理了从光信号获取到颜色处理的完整路径,并展望了人工智能与新型视觉模型在未来医疗成像与色彩科学中的发展方向。

g2h3i4j5的博客 152

分治法求解序列最大最小元素【算法设计与分析】

实验问题: 给定一个序列求出此序列的最大最小值&lt;要求利用分治法求解&gt; 问题分析: 为了得到更小的比较次数,采用分治法求解问题; 将序列等分为两组,目的是分别求解两组的最大最小值; 再递归分解直到每组个数不大于2,就可以找到最大(小)值; 再回溯将分解的两组解大者的值取大,解小的取小,合并解。 数学建模: 建立函数MAXMIN(i,j,a)&lt;其中i是一段序列的头指针,j是这段序列的尾指针,a是最开始输入的数组&gt; 当没有分解完全时(i!=j||i!=j-1) 递归分解

不是一切星星 都仅指示黑暗 7053

『MaxKB 2.x 开发环境搭建』在Windows下运行最新源码的完整步骤

本文将详细介绍如何在Windows系统中完成MaxKB最新版(2.x)开发环境的搭建,包括前端、后端以及数据库的配置,确保开发者能够顺利启动项目。

老陈聊架构 586

【基础算法】 书的复制

问题 D(1233): 【基础算法】 书的复制 时间限制: 1 Sec  内存限制: 64 MB 题目描述 现在要把m本有顺序的书分给k给人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三、第四本书给同一个人抄写。 现在请你设计一种方案,使得复制时间最短。复制时间为抄写页数最多的人用去的时间。 输

静女俟隅 445

C/C++小宇宙代码(完整代码)

C语言实现小宇宙的完整代码。

AIGC 2523

京东/淘宝商品评论情感分析:基于Python的大规模评论爬取与NLP情感分析实战

在当今电商蓬勃发展的时代,用户评论已成为影响消费者购买决策的关键因素。本文将详细介绍如何使用Python最新技术栈爬取京东和淘宝商品评论,并运用先进的自然语言处理技术对评论进行情感分析,识别用户的好评与差评倾向。通过完整的代码实现和深入的技术解析,帮助读者掌握从数据采集到情感分析的全流程。本文详细介绍了如何使用Python最新技术栈实现京东和淘宝商品评论的爬取与情感分析。通过结合异步爬虫、反爬策略、BERT情感分析等先进技术,我们构建了一个完整的评论分析系统。高效爬取。

2201_76125261的博客 1402

OJ P1115 集合划分 (递归)

#include#include#include#include#includeusing namespace std;int n,m;unsigned long f(int n,int m){ if((n==0)||(n==m)||(n==1)||(m==1)) return 1; if (n return f(n-1,m-1)+m*f(n-1,m);//

259

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

九度 1544 数字序列区间最小值

题目1544:数字序列区间最小值 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:602 解决:112 题目描述: 给定一个数字序列,查询任意给定区间内数字的最小值。 输入: 输入包含多组测试用例,每组测试用例的开头为一个整数n(1 接下去一行给出n个数字,代表数字序列。数字在int范围内。 下一行为一个整数t(1 最后t行,每行给出一

mejustdoit的专栏 1450

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

打印C++中的极大极小数值

#include int main() { cout::max)()<<endl; cout::min)()<<endl; cout::max)()<<endl; cout::min)()<<endl; cout::max)()<<endl; cout::min)()<<endl; cout::max)()<<endl; cout:

简简单单的生活... 511

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

求解极值的数值算法

好几个星期没有更新博客了,最近也是考试多,抽不出多少时间,今天在看书的时候看到了详细的求解极值的算法,都是最基本的,就准备写下来当做学习记录。 (一)最速下降法(梯度下降法)            描述:先给出 f(X)极小值点的X*的一个估计值Xo(称作初始点),然后依次计算出 Xk+1=g(Xk)并且希望点列{ Xk}的极限就是要找的极值点X*。其中g()为迭代格式Xk+1=Xk+aDk,

zhangyue_lala的博客 8119

最优子序列问题

最优子序列问题 问题描述:把一个包含n个正整数的序列划分成m个连续的子序列(每个正整数恰好属于一个序列)设第i个序列的各数之和为S(i),你的任务是让所有S(i)的最大值尽量小。例如序列1,2,3,2,5,4划分成3个序列的最优方案为1,2,3|2,5|4,其中S(1),S(2),S(3)分别为6,7,4,最大值为7;如果划分成1,2|3,2|5,4,则最大值为9,不如刚...

weixin_30511039的博客 1147
上一篇: noip普及2016总结
下一篇: (1365): [CEOI96]渡轮问题
dogeding
博客等级 码龄10年 31粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值