xtu oj Estrella‘s Chocolate

news/2024/11/27 3:24:53/

样例输入

2
5 2
5 3 2 4 1
5 3
5 3 2 4 1

样例输出

8
5

解题思路:二分法,emm……,感觉挺难想到的。

问题简化

给定一个数组,和一个值k,数组分成k段。要求这k段子段和最大值最小。求出这个值。

1、求出数组中的最大值max与数组所有值的和sum,则所求值必在max与sum之间

2、二分思想,将max与sum命为left与right,并不断测试中值,不断二分,最后得到所求值。

Num函数用来记录数组划分不大于mid的划分次数。

(1)如果Num(mid)<=m,小于说明分的段小了(mid数大了),等于继续划分,让k段子段和最大值最小,right=mid

(2)如果Num(mid)>m,大于说明分的段多了(mid数小了),left=mid+1。

参考:

二分法解数组分段和最大值最小问题

#include<stdio.h>
int a[10005]={};
int n,m,i;
int Max(int a[],int n){int i,max=0;for(i=0;i<n;i++){if(a[i]>max)max=a[i];}return max;
}
int Sum(int a[],int n){int i,sum=0;for(i=0;i<n;i++){sum+=a[i];}return sum;
}
//分成和不大于x的分段次数 
int Num(int a[],int n,int x){int num=1,total=0;for(i=0;i<n;i++){total+=a[i];if(total>x){num++;total=a[i];} } return num;
}
//二分查找
int find(int a[],int n,int m){int left=Max(a,n);int right=Sum(a,n);int mid,t;//t为划分最大值为x的划分次数 while(left<right){mid=(left+right)/2;t=Num(a,n,mid);if(t<=m){//说明mid大了 right=mid;} else{left=mid+1;}}return left;
} 
int main(){int T;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(i=0;i<n;i++){scanf("%d",&a[i]);}printf("%d\n",find(a,n,m));}
} 


http://www.ppmy.cn/news/1550223.html

相关文章

裸金属服务器能够帮助企业解决哪些问题?

随着网络科技的快速发展&#xff0c;企业业务也在不断的进行扩张和复杂化&#xff0c;传统的服务已经无法满足企业对于高性能和高稳定性的需求&#xff0c;而裸金属服务器则能够帮助企业来解决这一问题&#xff0c;下面我们就来具体看一下吧&#xff01; 裸金属服务器能够允许应…

组合模式和适配器模式的区别

组合模式&#xff08;Composite Pattern&#xff09;和适配器模式&#xff08;Adapter Pattern&#xff09;都是结构型设计模式&#xff0c;它们解决的问题不同&#xff0c;应用场景也不一样。下面我来对比一下这两种模式的区别&#xff1a; 1. 目标和用途 组合模式&#xff0…

力扣—53. 最大子数组和

53. 最大子数组和 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4…

sklearn中常用数据集简介

scikit-learn库中提供了包括分类、回归、聚类、降维等多种机器学习任务所需的常用数据集&#xff0c;方便进行实验和研究&#xff0c;它们主要被封装在sklearn.datasets中&#xff0c;本文对其中一些常用的数据集进行简单的介绍。 1.Iris&#xff08;鸢尾花&#xff09;数据集…

JDK1.8新增特性

新特性&#xff1a; Lambda表达式: &#xff08;语法三要素&#xff1a;参数、箭头、代码&#xff09; JDK1.8引入的一种新语法Lambda表达式,它简化了匿名内部类的使用和提高代码的可读性。 /**正常写法创建Runable**/ Runnable runnable new Runnable() {Overridepublic voi…

HarmonyOS Next 简单上手元服务开发

HarmonyOS Next 简单上手元服务开发 万物互联时代&#xff0c;人均持有设备量不断攀升&#xff0c;设备种类和使用场景更加多样&#xff0c;使得应用开发、应用入口变得更加复杂。在此背景下&#xff0c;应用提 供方和用户迫切需要一种新的服务提供方式&#xff0c;使应用开发…

MySQL基础大全(看这一篇足够!!!)

文章目录 前言一、初识MySQL1.1 数据库基础1.2 数据库技术构成1.2.1 数据库系统1.2.2 SQL语言1.2.3 数据库访问接口 1.3 什么是MySQL 二、数据库的基本操作2.1 数据库创建和删除2.2 数据库存储引擎2.2.1 MySQL存储引擎简介2.2.2 InnoDB存储引擎2.2.3 MyISAM存储引擎2.2.4 存储引…

vue3+elementui-plus el-dialog全局配置点击空白处不关闭弹窗

在与main.ts同级下的plugins文件夹&#xff08;如果没有&#xff0c;新建一个&#xff09;下建一个element.js文件&#xff08;名字随便取&#xff09; element.js文件内容如下&#xff1a; import ElementPlus from element-plus export default (app) > {console.log(app…