最小m子段和(动态规划)
问题描述:
给定n个整数组成的序列,现在要求将序列分割为m段,每段子序列中的数在原序列中连续排列。如何分割才能使这m段子序列的和的最大值达到最小?
输入格式:
第一行给出n,m,表示有n个数分成m段,随后一行给出n个数,以空格分隔
输入样例:
9 3
9 8 7 6 5 4 3 2 1
输出样例:
17
解释:
9 8 | 7 6 | 5 4 3 2 1,9个数分成3段所有情况里这种分法的最大子段和(17)最小。
思路:
动态规划的一种模板,包括矩阵连乘,石子归并等问题。先是考虑分的段数,然后考虑起点/终点,最后是每段中分割点的位置。
本题中使用 dp[i][j]表示前i个数分成j段里最小的最大子段和,则dp[i][j]=min{dp[i][1]-dp[k][1],dp[k][j-1] (1<=k<i)};
代码:
#include<bits/stdc++.h>
using namespace std;
#define N 99
#define inf 0x3f3f3f3f
int a[N],dp[N][N];//dp[i][j]表示前i个数分j段所有情况里最大子段和最小的
int main()
{
int n,m;
cin>>n>>m;
for(int i=; i<=n; i++)
cin>>a[i];
for(int i=; i<=n; i++)
dp[i][]=dp[i-][]+a[i];
for(int r=; r<=m; r++){
for(int i=; i<=n; i++){
int mins=inf;
for(int k=; k<i; k++){
int t=max(dp[i][]-dp[k][],dp[k][r-]);
if(t<mins) mins=t;
}
dp[i][r]=mins;
}
}
cout<<dp[n][m];
return ;
}
最小m子段和(动态规划)的更多相关文章
- 51nod 1065 最小正子段和
题目链接:51nod 1065 最小正子段和 房教说用前缀和做,然后看了别人博客懂了后就感觉,这个真有意思... #include<cstdio> #include<cstring& ...
- Leetcode 931. Minimum falling path sum 最小下降路径和(动态规划)
Leetcode 931. Minimum falling path sum 最小下降路径和(动态规划) 题目描述 已知一个正方形二维数组A,我们想找到一条最小下降路径的和 所谓下降路径是指,从一行到 ...
- AC日记——最小正子段和 51nod 1065
最小正子段和 思路: 找最小的大于0的sum[j]-sum[i](j>i): 高级数据结构(splay)水过: 来,上代码: #include <cstdio> #include & ...
- 51nod-1065:最小正子段和(STL)
N个整数组成的序列a11,a22,a33,…,ann,从中选出一个子序列(aii,ai+1i+1,…ajj),使这个子序列的和>0,并且这个和是所有和>0的子序列中最小的. 例如:4,-1 ...
- 51nod 1065:最小正子段和
1065 最小正子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 取消关注 N个整数组成的序列a[1],a[2],a[3],-,a[n],从中选出一 ...
- 51nod-1065 最小正子段和 【贪心 + 思维】
N个整数组成的序列a[1],a[2],a[3],-,a[n],从中选出一个子序列(a[i],a[i+1],-a[j]),使这个子序列的和>0,并且这个和是所有和>0的子序列中最小的. 例如 ...
- 【51Nod】1510 最小化序列 贪心+动态规划
[题目]1510 最小化序列 [题意]给定长度为n的数组A和数字k,要求重排列数组从而最小化: \[ans=\sum_{i=1}^{n-k}|A_i-A_{i+k}|\] 输出最小的ans,\(n \ ...
- 【zznu-2060】 Minsum Plus(最小正子段和)
题目描述 题意简单到令人发指! 序列A由N个整数组成,从中选出一个连续的子序列,使得这个子序列的和为正数,且和为所有和大于零的子序列中的最小值. 将这个值输出,若无解,输出no solution. 输 ...
- [51nod1065]最小正子段和
题意:求一个序列中大于0的最小子段和. 解题关键: 先求出前缀和和,对于每个位置求某个位置到当前位置和大于1的和的最小值.然而这是复杂度是O(n^2)的.其实可以通过排序优化到O(nlogn).对前缀 ...
随机推荐
- postman--接口网站测试
直接在官网下载安装即可 https://www.getpostman.com/downloads/
- mongodb 连接后无法使用 发现已经有进程在运行
mongod 命令执行发现已经有进程在运行mongod数据库--errno:48 Address already in use for socket: 0.0.0.0:27017 错误信息: list ...
- 如何运行spring boot 工程
1.右键工程,Run As, Maven install, 2.右键工程,Run As,Spring Boot App 3.在地址栏输入127.0.0.1:8080 动图示例
- JS节流和防抖的区分和实现详解
参考链接:http://caibaojian.com/throttle-debounce.html
- .NET的垃圾回收机制
.NET的垃圾回收机制: CLR管理内存的区域主要有三块: 一: 线程的堆栈 ,用于分配值类型实例.堆栈主要有操作系统管理,不受垃圾收集器的控制,当值类型实例所在的方法结束时,其存储单位自动释放.栈的 ...
- new pdo 连接很慢的原因和解决办法
1.使用IP而不是域名,使用域名会让PDO在连接之前进行一次不必要的dns lookup,当DNS缓存过于巨大的时候,这个问题可能会更严重.(即使是运行在本机,使用 127.0.0.1 而不是 loc ...
- org.springframework.http.converter.HttpMessageNotReadableException
发起请求报错:org.springframework.http.converter.HttpMessageNotReadableException 查看请求头: application/json 所以 ...
- Kubernetes---资源控制器之DaemonSet、Job和CronJob
⒈DaemonSet介绍,什么是DaemonSet DaemonSet 确保全部(或者一些)Node 上运行一个Pod的副本[注意主节点并不会参加调度].当有 Node 加入集群时,也会为他们新增一个 ...
- kubernetes--资源清单
⒈资源含义 k8s中所有的内容都被抽象为资源,资源实例化之后,叫做对象. ⒉资源分类 名称空间级别 仅在此名称空间下生效,k8s的系统组件是默认放在kube-system名称空间下的,而kubectl ...
- LC 416. Partition Equal Subset Sum
题目 Given a non-empty array containing only positive integers, find if the array can be partitioned i ...