[算法题]最小m划分(划分DP)
题目描述
给定 n 个整数组成的序列,将序列分割为 m 段,如何分割才能使这 m 段子序列的和的最大值达到最小?
题解
- 状态表示 dp[i][j]表示前i个元素划分j段 子序列和的最大值的最小值
 - 状态转移 dp[i][j]=min{dp[i][j], max{dp[k][j-1],dp[i][1]-dp[k][1]}},其中前k个元素是前j-1段,k+1到末尾是最后一段。
 - 初始化 dp[i][1]=对应子数组原始元素和
 
todo
for循环的终止条件还有需继续思考为什么不是注释的?或者换成注释要改哪里。
代码
public class Main {
	public static void main(String args[]) {
		int[] arr= {9,8,7,6,5,4,3,2,1};
		int m=3;
		int minMaximum=minMaxMSegSum(arr,m);//9,8/,7,6/,5,4,3,2,1
		System.out.println(minMaximum);
	}
	public static int minMaxMSegSum(int arr[],int m) {
		int[][] dp=new int[arr.length+1][m+1];
		int sum=0;
		for(int i=0;i<arr.length;++i) {
			sum=sum+arr[i];
			dp[i+1][1]=sum;
		}
		for(int i=2;i<arr.length+1;++i) {//
			for(int j=2;j<=m&&j<=i;++j) {//
				dp[i][j]=Integer.MAX_VALUE;//
				for(int k=1;k<i;++k) {//&&j-1<=k?
					dp[i][j]=Math.min(dp[i][j], Math.max(dp[k][j-1],dp[i][1]-dp[k][1]));//
				}
			}
		}
		return dp[arr.length][m];
	}
}
												
											[算法题]最小m划分(划分DP)的更多相关文章
- 51nod 1201 整数划分 基础DP
		
1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} ...
 - 125.乘积最大(划分性DP)
		
1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Descriptio ...
 - cogs 728. [网络流24题] 最小路径覆盖问题 匈牙利算法
		
728. [网络流24题] 最小路径覆盖问题 ★★★☆ 输入文件:path3.in 输出文件:path3.out 评测插件时间限制:1 s 内存限制:128 MB 算法实现题8-3 最 ...
 - Good Vegetable 4级算法题 分值: [320/3120] 问题: [8/78]
		
1523 非回文 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个字符串是非回文的,当且仅当,他只由前p个小写字母 ...
 - LeetCode算法题-Min Cost Climbing Stairs(Java实现)
		
这是悦乐书的第307次更新,第327篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第176题(顺位题号是746).在楼梯上,第i步有一些非负成本成本[i]分配(0索引). ...
 - LeetCode算法题-Quad Tree Intersection(Java实现)
		
这是悦乐书的第260次更新,第273篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第127题(顺位题号是558).四叉树是树数据,其中每个内部节点恰好有四个子节点:top ...
 - LeetCode算法题-Construct Quad Tree(Java实现)
		
这是悦乐书的第224次更新,第237篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第91题(顺位题号是427).我们想使用四叉树来存储N×N布尔网格.网格中的每个单元格只 ...
 - 51nod图论题解(4级,5级算法题)
		
51nod图论题解(4级,5级算法题) 1805 小树 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 她发现她的树的点上都有一个标号(从1到n),这些树都在空 ...
 - Bit Operation妙解算法题
		
5道巧妙位操作的算法题. ***第一道*** 题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. ...
 
随机推荐
- 极简 Node.js 入门 - 2.4 定时器
			
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
 - SQL Server中row_number函数的简单用法
			
一.SQL Server Row_number函数简介 ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数. 行号以每个分区中第一行的行号开头. 以下是R ...
 - IDEA创建聚合项目
			
1.新建一个空工程 2.新建Modul New-->Modul 3.选择maven(不选模板,放在工程下) 4.选择依赖 <project xmlns="http://maven ...
 - java中Math的常用方法整理
			
public class Demo{ public static void main(String args[]){ /** *Math.sqrt()//计算平方根 *Math.cbrt()//计算立 ...
 - 求求大厂给个Offer:List面试题
			
前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 从今天开始,我,三歪,正式开始写面试系列.我给这 ...
 - python中a, b = a, a + b这条语句是如何执行的?
			
a,b=b,a+b,这条语句在"理解"上还是与C语言有些差别的.在Python中,可以做下面的方式理解:首先,把等号右边的算式分别算完再说,然后按照一一对应的关系把值赋给等号左边的 ...
 - Python目录与文件操作
			
一.判断一个路径是否存在 os.path.exists(path) 如果路径存在则返回True,否则返回False. import os import getpass # 获取当前系统用户名 user ...
 - Python2.7.8  setuptools 下载及安装方法
			
Python2.7.8 setuptools 下载及安装方法 电脑配置:联想笔记本电脑 windows8系统 Python版本:2.7.8 本文章撰写时间:2014.12.11 作者:陈东陈 阅读说 ...
 - 牛客网PAT练兵场-跟奥巴马一起编程
			
题目地址: 题意:无 /** * *作者:Ycute *时间:2019-11-14-21.29.07 *题目题意简单描述:模拟题输出 */ #include<iostream> #incl ...
 - Java方法传参,测试在方法内部改变参数内容是否会影响到原值
			
我分了三种类型的参数进行测试 一.基本类型 public static void main(String[] args) { System.out.println("验证基本类型int作为参 ...