【dp】最小m段和问题
来源:互联网 发布:淘宝联盟能用红包吗 编辑:程序博客网 时间:2024/05/18 02:09
问题描述:
给定n个整数组成的序列,现在要求将序列分割为m段,每段子序列中的数在原序列中连续 排列。如何分割才能使这m段子序列的和的最大值达到最小?
编程任务:
给定n个整数组成的序列,编程计算该序列的最优m段分割,使m段子序列的和的最大值达到 最小。
数据输入:
输入的第1行中有2个正整数n和m。正整数n是序列的长度;正整数m是分割的断数。接下来 的一行中有n个整数。
结果输出:
输出的第1行中的数是计算出的m段子序列的和的最大值的最小值。
样例:
1 1
10
10
核心思想:
二分答案+贪心验证
var a:array[0..200]of longint; n,m,i,l,r,tot:longint;function pd(x:longint):boolean;var i,ans,sum:longint;begin ans:=1;sum:=0; fori:=1 to n do begin ifa[i]>x then exit(false); ifsum+a[i]<=x then inc(sum,a[i]) else begin inc(ans); sum:=a[i]; end; ifans>m then exit(false); end; exit(true);end;begin assign(input,'p310.in');reset(input); assign(output,'p310.out');rewrite(output); readln(n,m); fori:=1 to n do begin read(a[i]); inc(tot,a[i]); end; l:=0;r:=tot; while l<r do ifpd((l+r)shr 1) then r:=(l+r)shr 1 else l:=(l+r)shr 1+1; writeln(l); close(input);close(output);end.题目来源:《算法设计与分析》第三章动态规划
- 【dp】最小m段和问题
- 最小m段和(DP)
- 最小m段和dp
- 最小m段和问题
- 最小m段和问题
- 最小M段和问题
- 最小m段和问题
- 最小m段和问题
- 最小m段和问题
- 最小m段和问题
- 最小m段和问题
- 最小m段和问题
- 最小m段和问题
- 算法 最小M段和问题
- 最小m段和
- 最小m段和
- 最小m段和
- 最小m段和
- 如何用gdb找到Android so文件中的加密key
- oracle学习笔记三——权限管理
- POJ 3034 Whac-a-Mole DP
- 创意手机APP
- Hibernate如何调用存储过程
- 【dp】最小m段和问题
- 无题
- HDU 3987 Harry Potter and the Forbidden Forest 最小割
- Android应用程序注册广播接收器(registerReceiver)的过程分析
- 给菜鸟看的Android应用开发全流程
- 一起来学UML(4)——类图中的多重性(Multiplicity)
- 诺基亚宣布旗下所有手机都将配备NFC技术
- 程序员有趣的面试智力题
- java随机坐标显示图片