`
zhenzxie
  • 浏览: 68212 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

第一次写二分法查找_poj3273

    博客分类:
  • Code
阅读更多
http://poj.org/problem?id=3273
(1)题意: 给你天数N(1 ≤ N ≤ 100,000),和每天需要花的钱(存放在数组中),让你把这些天分成M(1 ≤ M ≤ N)份(每份都是连续的天),要求每份的和最大值尽量小,输出这个和。
(2)思想:二分查找。让数组中的最大值为左界,数组的和为右界。左界的含义是将整个数组分成N块,那么和的最大值就是数组元素中的最大值。右界的含义是将整个数组当做一块,那么最大值就是所有数字之和。那么在左右界中(含左右界)的数肯定有一个是解。接着进行二分搜索:给定一个数count,从数组首元素开始叠加,超出count那么分块数i加1,那么这么遍历一遍后能得到以count为解所需的分块数,要是i小于M,说明count给的大了,反之count给小了。
(3) Java实现:

package id3000_3999;

import java.util.Scanner;

/**
 * 5608K 2204MS ac
 */
public class Id3273 {
	static int[] arr;
	
	public static void main(String[] args) {
	
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int M = sc.nextInt();
		arr = new int[N];
		int count = 0, left = 0, right = 0;
		while (count < N) {
			arr[count] = sc.nextInt();
			if (arr[count] > left)
				left = arr[count];
			right += arr[count];
			count++;
		}
		while (left < right) {
			count = (left + right) >> 1;
			int i = deal(count);
			if (i < M) {
				right = count;
			} else {
				left = count + 1;
			}
		}
		System.out.println(left);
	}
	/**
     * @return i 以countwield解所需的分块数
     */
	private static int deal(int count) {
	
		int i = 0, len = arr.length,sum = 0;
		for (int j = 0; j < len; j++) {
			sum += arr[j];
			if (sum > count) {
				i++;
				sum = arr[j];
			}
		}
		return i;
	}

}

分享到:
评论

相关推荐

    二分法查找算法C源码.rar_二分查找算法_二分法_二分法查找_;C源码;

    二分查找算法,又称折半查找算法,是一种在有序数组中快速定位目标元素的搜索算法。它的基本思想是将待查找的元素与数组中间位置的元素进行比较,根据比较结果来决定是在数组的左半部分还是右半部分继续查找。通过...

    温度转换二分法_二分法_温度二分法查表_40_

    二分法,又称折半查找法,是一种高效的算法,常用于有序数据集合中寻找特定元素。在温度测量领域,如果我们有一个预设的温度-电阻(或电压)对应关系表,我们可以利用二分法快速找到特定温度对应的电阻值或电压值。 ...

    bisect.rar_bisect matlab_二分法_二分法 matlab_二分法matlab_二分法求解

    数值分析中用二分法求解函数值,本资料正是二分法求函数值的MATLAB代码

    shuzhifenxi.rar_matlab二分法_二分法 matlab_二分法matlab_高斯牛顿

    首先,我们要理解二分法(Bisection Method),这是一种用于找实数根的数值方法。它基于介值定理,将区间不断减半,直到找到一个足够小的满足精度要求的根。在Matlab中,`erfen.m`可能就是实现二分法的脚本。它通常...

    二分法.zip_C++_二分法_二分法查找vc++

    同时,二分查找可以用于解决一些变种问题,如查找最接近目标值的元素、查找第一个大于或小于目标值的元素等。 总结一下,二分查找是一种高效查找算法,尤其适用于有序数据。C++中的实现通常包括设置搜索范围、迭代...

    二分法查找.zip_二分查找_二分法

    C语言编程学习,使用二分法查找最大/最小数据

    二分法.zip_offer61q_二分法_二分法查找

    定义任意长度数组,排好序后按二分查找法查找元素

    数据结构快速排序二分法查找

    二分法查找(Binary Search)是一种查找算法,用于查找排序后的数组中是否包含某个元素。二分法查找的时间复杂度为O(log n),是当前最快的查找算法之一。 在上面的代码中,BinSearch函数是二分法查找的实现,函数的...

    java算法——二分法查找

    二分法查找 *进行二分法查找的前提是数组已有序 *查找范围的上下界

    erfenfa.rar_erfen_matlab 二分法_matlab,二分法_二分法_二分算法matlab

    二分法,也称为折半搜索或区间搜索,是一种在有序数据集合中寻找特定元素的搜索算法。在MATLAB环境中,二分法被广泛应用于数值计算、求解方程、优化问题等领域。这个名为"erfenfa.rar"的压缩包包含了一个关于二分法...

    c语言 二分法查找

    二分法查找(Binary Search),又称为折半查找,是一种在有序数组中查找特定元素的高效算法。其基本思想是通过将目标值与数组中间位置的元素进行比较,不断缩小查找范围,从而提高查找效率。具体步骤如下: - 首先...

    写出二分法查找算法函数实现。

    - 提供一个简化版本的 `binarySearch` 方法,该方法默认从数组的第一个元素到最后一个元素进行查找。 ```java public static &lt;T extends Comparable&lt;? super T&gt;&gt; int binarySearch(T[] value, T key) { return ...

    二分法_ideazzf_二分法_弦截法_

    计算方法,二分法,弦截法应用。对于区间[a,b]上连续不断且f(a)·f(b)&lt;0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法。

    Java程序设计基础:一维数组应用查找二分法查找).pptx

    ——二分法查找 目录 课程导入 1 清楚并牢记二分法的实现条件 2 理解二分法的实现思路 3 读懂二分法的实现代码 数组的查找——二分法查找 也称拆半查找法,是一种高效的查找方法,前提条件是数组元素必须已经按升序...

    学学Python_34函数_创建函数04 二分法查找

    本篇文章将聚焦于一个重要的查找算法——二分法查找,它在处理大规模有序数据时表现出极高的效率。 二分法查找,也称为折半查找,是一种在有序数组中查找特定元素的搜索算法。其基本思想是通过不断将待搜索区间减半...

    二分法_二分法解方程_

    二分法,也称为折半搜索或二分搜索,是一种在有序数组中查找特定元素的搜索算法。这个方法的关键在于其高效性,每次查询都能将搜索区间减半,因此在大量数据中查找特定值时非常有效。二分法不仅用于查找,还可以应用...

    二分法查找算法代码 c语言实现

    二分法查找,又称折半查找,是一种在有序数组中搜索特定元素的高效算法。它通过不断缩小搜索范围,将查找复杂度降低到对数级别,显著提高了查找效率。在这个资源包中,我们重点关注的是使用C语言实现的二分法查找...

    【JAVA基础】【算法】冒泡排序_优化排序,二分法查找_折半检索

    冒泡排序是一种简单直观的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。这种排序方式就像水底下的气泡一样,较大的元素通过不断地交换逐渐“浮”到数列的顶端。冒泡...

    二分法matlab程序.zip_matlab DICHOTO_matlab 二分法_matlab二分法_二分法主程序

    二分法(dichotomie) 即一分为二的方法. 设[a,b]为R的闭区间. 逐次二分法就是造出如下的区间序列([an,bn]):a0=a,b0=b,且对任一自然数n,[an+1,bn+1]或者等于[an,cn],或者等于[cn,bn],其中cn表示[an,bn]的...

    改进的二分法查找

    【二分法查找】是一种在有序数组中查找特定元素的高效算法。它的基本思想是将查找区间不断减半,直到找到目标元素或者确定元素不存在。在每次比较后,根据目标元素与中间元素的大小关系,将查找范围缩小至中间元素的...

Global site tag (gtag.js) - Google Analytics