UVa 714 - Copying Books

UVA714 抄书 Copying Books 知识点:二分 首先读题就看出来这个是最小化最大值的二分,从右向左的,然后要注意的是由于是求连续子列的和,所以有可能会出现溢出,需要在相应的地方用longlong,这个题的二分不难写,就是输出很麻烦,它要保证两个条件,一个是前面的子列尽可能小,但是还不能为空,至少要有一个,所以就想到了从后向前遍历,需要分类讨论,这个地方改了很多次终于改对了, #include <bits/stdc++.h> #define fi first #define se second #define pb push_b 阅读详情
“最大值最小化”问题,先二分求最大值,再贪心实现按最左边区间最小的格式输出 。

代码如下:

#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>

using namespace std;

int main()
{
#ifdef test
    freopen("in.txt", "r", stdin);
#endif
    int a[505], b[505];
    int k, m, num;
    scanf("%d", &num);
    while(num--)
    {
        long long left = 0, right = 0, ct, to, mid;
        memset(b, 0, sizeof(b));
        scanf("%d%d", &m, &k);
        for(int i = 0; i < m; i++)
        {
            scanf("%d", &a[i]);
            right += a[i];
        }
        while(left < right)    // 二分求最大值
        {
            ct = 0, to = 0;
            mid = (left + right) / 2;
            for(int i = 0; i < m; i++)
            {
                to += a[i];
                if(a[i] > mid)  // 当单个元素大于中值时,需增大mid的值
                {
                    ct = k;     // 使其跳出
                    break;
                }
                if(to >= mid)
                {
                    if(ct >= k)
                        break;
                    ct++;
                    to = a[i];
                }
            }
            if(ct > k - 1)
                left = mid + 1;
            else
                right = mid;
        }
        for(int cct = 0, tot =0, i = m - 1; i >= 0; i--)  // 贪心
        {
            tot += a[i];
            if(a[i] > mid)    //二分求最大值时可能有一点小误差,当单个元素略大于最大值时,用此更新最大值
                mid = a[i];
            if(cct < k - 1 && (tot > mid || i < (k - 1) - cct)) // 区间值大于最大值或是所剩元素与所剩区间数相等时都需划分
            {
                b[i] = 1;
                tot = a[i];
                ++cct;
            }

        }
        for(int i = 0; i < m; i++)
        {
            printf("%d%c", a[i], i != m-1 ? ' ' : '\n');
            if(b[i])
                printf("/ ");

        }
    }
    return 0;
}


动态规划划分最小和 把一个包含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<10^6, 所有数之和不超过10^9 立即下载

相关推荐

深入IR2104数据手册:被忽略的SD引脚用法和死区时间调节实战

本文深入解析IR2104半桥驱动芯片的SD引脚用法和死区时间调节技巧,帮助硬件工程师优化电机控制和电源转换系统。通过详细的电路设计、实测数据和调试方法,揭示SD引脚的多重保护机制和死区时间的精密调节策略,提升系统安全性和效率。

weixin_30342363的博客 391

Uva 714 (抄书问题,二分查找+贪心)

Uva 714 (抄书问题,二分查找+贪心)

roufoo的博客 644

ZEMAX学习第7天-手机镜头光学系统设计全过程案例

接下来对系统微调,依次缩小CRA和畸变,首先对CRA进行依次递减(39°、38°、37°、36°、35°),目前CRA角度40度,每次下降一度进行优化,利用MAXX加OPLT一起控制,控制小于35°。可以看出在标注的三个地方镜头曲率变化,导致PY=1的光线走向奇特,因此需要对矢高进行调整,按照标注的地方依次调整(从右到左)至传函变好,越靠近右边对其余视场影响越小。3.圆锥系数值较大,透镜形状怪异;一、第1,3镜子偏厚,第4镜子偏薄,45镜子间隔边缘偏小,第5片镜子中心厚度与边缘厚度相差较大,需要控制;

liningliwei的博客 1079

UVa 714 抄书(贪心+二分)

https://vjudge.net/problem/UVA-714 题意:把一个包含m个正整数的序列划分成k个非空的连续子序列,使得每个正整数恰好属于一个序列。设第i个序列的各数之和为S(i),你的任务是让所有S(i)的最大值尽量小。 思路:“最大值尽量小”问题。 区间的范围肯定是所有数中最大的一个至所有数之和,我们可以使用二分法来确定这样的一个值x,x尽量小并且每个区...

weixin_30682127的博客 253

Linux下科大讯飞离线语音识别SDK从下载到实战(附常见问题解决)

本文详细介绍了在Linux系统下,如何从科大讯飞开放平台获取离线语音识别SDK,完成环境准备、编译部署到实战开发的完整流程。文章重点解析了SDK目录结构、语法词典定制、示例代码修改,并针对开发中常见的“词典加载失败”、音频格式、交叉编译及性能优化等问题提供了深度解决方案,助力嵌入式与IoT开发者快速实现稳定可靠的离线命令识别功能。

honey的博客 1241

解密m3u8视频合并:从猫抓插件到本地文件修改全流程

本文详细解析了m3u8视频合并的全流程,特别针对加密视频片段提供了解决方案。从使用猫抓插件捕获m3u8文件地址,到利用N_m3u8DL-CLI工具自动下载、解密并合并ts片段,手把手教你处理AES-128加密等常见问题,最终生成完整的本地MP4文件,适合需要备份或处理流媒体资源的用户。

weixin_29290947的博客 1363

UVa714 Copying Books(二分答案+贪心)

题目链接 1.题目大意:把一个正整数序列划分成k个非空的连续子序列,使得每个正整数恰好属于一个序列。设第i个序列的各数之和为S(i),现在我们要让所有S(i)的最大值尽量小。而且如果有多个解,S(1)尽量小,在此前提下S(2)尽量小…,按要求输出 2.最大值尽量小显然是需要二分答案。对于当前得到的答案,我们只需贪心的一直向后选择最大的子区间,即这一段相加小于等于当前答案。如果整个序列划分的个数小...

Happig的博客 718

Java的API帮助文档

JDK帮助文档 SUN公司为JDK工具包提供了一整套文档资料,我们习惯上称之为JDK文档。 JDK文档中提供了Java中的各种技术的详细资料,以及JDK中提供的各种类的帮助说明。 JDk文档是Java语言的完整说明,大多数书籍中的类的介绍都要参照它来完成,它是编程者经常查阅的资料 如何理解API:就当做是一个“字典”,“使用手册”,API就相当于是一个电子的帮助文档,可以帮我们查看JDK提供的类的信息,平时查看的时候可结合百度一起看。 官网下载: 1、登录Oracle官网(Oracl.

人生得意须尽欢 2万+

uva714-复制书稿

题目链接 http://acm.hust.edu.cn/vjudge/problem/19689 解题思路 寻找最小上界用二分法 打印方案时从右边(尾)尽量往左边(头)划分。段数不够的话,从最左边往右一个一个划分。 代码 #include<stdio.h> #include<string.h> //#define LOCAL typ...

anyi4391的博客 163

链路状态路由协议 OSPF (一)

本章将会学习链路状态路由协议OSPF,理解OSPF的基本概念,工作原理,掌握OSPF配置基本命令。本章重点,OSPF的基本概念,OSPF配置。

yj11290301的博客 3475

评估篇| 大模型评测综述

1、基于人类的评测。与针对基础大语言模型的自动化评测不同,微调大语言模型的评测更加注重模型在实际应用场景中的表现,如与人类交互的自然度、对齐度等。2、基于模型的评测。例如,AlpacaEval 排行榜 基于由大语言模型合成的人类需求指令作为评测任务,然后收集待评估大模型的回应,并采用 GPT-4 等大语言模型作为评测员,将待评估大语言模型的输出与参考输出进行成对比较。1、大语言模型对评估设置极为敏感,包括问题的表述方式、提示样本的选择以及答案的解析策略等,这些细微的差别都可能导致评估结果的显著变化。

youbingchen的博客 637

uva 714 Copying Books (二分)

uva 714 Copying BooksBefore the invention of book-printing, it was very hard to make a copy of a book. All the contents had to be re-written by hand by so called scribers. The scriber had been given a

总有那么一群人喜欢盯着我的博客看,估计这是他们见过最长的博客名,我必须得告诉他们博客名最长可以写多长 797

AI驱动的客户终身价值分析:深入理解公司的收入质量

客户终身价值(Customer Lifetime Value, CLV)是衡量客户在整个生命周期内能为企业带来多少利润的重要指标。传统的CLV计算方法往往过于简化,无法准确反映复杂的客户行为和收入模式。本文旨在介绍如何利用人工智能技术,特别是机器学习方法,构建更精确的CLV预测模型,从而帮助企业深入理解其收入质量。CLV的基本概念和商业意义传统CLV计算方法的局限性基于机器学习的CLV预测方法特征工程和模型选择策略实际应用案例和Python实现首先介绍CLV的基本概念和商业背景。

AI云原生与云计算技术学院 477

解题报告 之 UVA714 Copying Books

解题报告 之 UVA714 Copying Books Description Before the invention of book-printing, it was very hard to make a copy of a book. All the contents had to be re-written by hand by so called scr

JUST CODE 773

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

老版QQ原生表情gif动态

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

[较难] UVa OJ 714 Copying books

题目描述 本题比较难,本人自己写了一份代码,但没有AC,下面给出《算法竞赛入门经典》书上代码,书上页码244 本题较难,仅Mark // UVa714 Copying Books // Rujia Liu #include #include #include using namespace std; const int maxm = 500 + 5; int m, k, p[maxm];

zypang1的博客 291

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

UVA 714 Copying Books

这道题要二分答案,怎么二分呢? 题目要把一个连续的序列分成k部分,当k一定时,要求值和最大部分的值尽量小,如果有多解,就在这个基础上,第一部分的和尽量小,如果仍有多解,就第二部分的和尽量小,以此类推; 所以题目就变成了找到一个最小的x,使得每一部分的和都&lt;= x; 那么这个x的最大值是什么?假设有n个元素,很显然,在k = 0时取得,是这个序列的和,x的最小值是什么?在k = n-1取得,x...

altoer的博客 271

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【紫书】UVA714 抄书 Copying Books

【紫书】UVA714 抄书 Copying Books

Tanzq的博客 298

UVa 714 Copying Books

题目要求将m本书按原顺序分成k个连续部分,分配给k个抄写员,使得最大工作量最小化,并在多个最优解中选择字典序最小的方案。通过二分答案确定最小最大段和,再采用从后往前的贪心策略构造划分方案,确保前面的抄写员工作量尽可能小。时间复杂度为O(m log(Σp_i)),适用于较大输入规模。

寂静山林 181

UVA-714 Copying Books

题目链接:https://vjudge.net/problem/UVA-714 用紫书上的思路,二分法求最小值 #include #include #include #include #include using namespace std; typedef long long ll; const int N=500+5; const ll M=5*1e9; int a[N]; int n,k

wl16wzl的博客 177

Uva 714 Copying Books

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=655 题目:附件 题意:经典的最大值最小化问题。一些书和一些抄写员,分配任务使总的工作时间最短,即所有抄写员的时间的最大值最小。 题解:小白上有详细解释。    

Keaper的博客 379

UVA - 714 Copying Books

题目链接:UVA 714 #include #include #include using namespace std; const int maxn = 10000000 + 5; int n, m; long long _max,left,right,_min; int a[maxn]; int ans[510]; bool judge(long long mid) //判断能

JYZ's Blog 360

Copying Books UVA - 714

比较经典的一个题目,考察的既不是滑动窗口也不是动态规划,考察的其实是二分法,二分的范围是从序列中的最大值到序列的所有的元素之和。每次二分计算出对应的mid值,然后判断是否能够将序列划分成为不超过k个部分,每个部分的值都不超过mid,如果可以,那么就继续缩小范围,也就是降低下限进行判断,如果不可以的话,那么就放大范围也就是提高下限进行判断,得出最终的结果之后,就开始对数列进行划分,这里要注意一个点,

zju2016的博客 438
上一篇: UVa 11234 - Expressions
下一篇: UVa 10037 - Bridge
GooMaple
博客等级 码龄14年 79粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值