最小m段和问题:给定n个整数组成的序列,现在要求将序列分割为m段,每段子序列中的数在原序列中连续排列。如何分割才能使这m段子序列的和的最大值达到最小?

Input

第一行输入一个整数t,代表有t组测试数据。
每组数据第一行为两个整数n,m分别代表序列的长度和最多可分的段数。
接下来一行包含n个整数表示序列。
0<=n<=50000 1<=m<=n,0<=ai<=2^30。

Output

输出一个整数表示和最大的一段的最小值。

#if 0 //内存爆,30%

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std; typedef long long ll;
ll a[], f[][]; int main()
{
int n, m, i, j, k;
ll maxt, tmp;
while(scanf("%d%d",&n,&m)==)
{
memset(f,,sizeof(f));
for(i=;i<=n;i++)
{
scanf("%d",&a[i]);
f[i][] = f[i - ][] + a[i];
} for (i = ; i <= m; i++)
{
for (j = i; j <= n; j++)
{
tmp = 2147483647L ; //tmp = LONG_MAX;
for (k = i; k<j; k++)
{
maxt = max(f[k][i - ], f[j][] - f[k][]);
if (tmp>maxt)
tmp = maxt;
}
f[j][i] = tmp;
}
}
printf("%d\n", f[n][m]);
}
return ;
}
#endif #if 0 //AC #include <cstdio>
#include <algorithm>
using namespace std; #define MAX(a,b) a>b?a:b typedef long long ll; int n, m;
ll a[];
ll sum;
ll maxx; bool judge(ll x)
{
ll duan = ;//表示分的段数
ll he = ;
for (int i = ; i<n; i++)
{
if (he + a[i]>x)//当当前段再加一段长度后超过了x的值,那么新开一段
{
duan++;
he = a[i];
if (duan >= m)//当还没有扫完这个序列但是已有的段数已经超过了所规定的段数
{
return false;
}
}
else
{
he = he + a[i];//延长该段
}
}
return true;
} int main()
{
while (scanf("%d%d", &n, &m) == )
{
sum = ;
maxx = -;
for (int i = ; i < n; i++)
{
scanf("%lld", &a[i]);
sum = sum + a[i];
maxx = MAX(maxx, a[i]);
}
ll l = maxx, r = sum;//左区间用maxx是因为所分的段里面如果不含该序列的最大值,那么这个段子的和一定大于最大值,右区间为sum是因为不分的时候段子和为sum
ll mid, ans;
while (l <= r)
{
mid = (l + r) / ;
if (judge(mid))//看是否能将序列分成符合段数不大于m 且最大和接近mid的段子们
{
ans = mid;
r = mid - ;//求的最小值
}
else
{
l = mid + ;
}
}
printf("%lld\n", ans);
}
return ;
} #endif

「问题描述」类似的题目:

给定一个n*m的矩阵,矩阵中的每个元素aij为正整数。

接下来规定

1.合法的路径初始从矩阵左上角出发,每次只能向右或向下走,终点为右下角。

2.路径经过的n+m-1个格子中的元素为A1,A2…A(n+m-1),Aavg为Ai的平均数,路径的V值为(n+m-1)*∑(Ai-Aavg) ^2

(1<=i<=n+m-1)

求V值最小的合法路径,输出V值即可,有多组测试数据。

最新文章

  1. EasyPR--开发详解(7)字符分割
  2. java 链表数据结构
  3. 【转载】Linux常用命令列表
  4. ecshop去掉“云服务中心”或者是“模板堂知识库”
  5. mysql高级排序&amp;高级匹配查询示例
  6. SerializationUtility
  7. HDU 4865 Peter&#39;s Hobby --概率DP
  8. CodeForces 164C Machine Programming 费用流
  9. hdu 4277 USACO ORZ
  10. PYTHON小CASE
  11. python (5分钟实现一个游戏的屏蔽敏感字系统,)
  12. 记一次python的一些参数
  13. Python2.x的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误
  14. (void) (&amp;_min1 == &amp;_min2);【转】
  15. netty源码解解析(4.0)-5 线程模型-EventExecutorGroup框架
  16. Oracle Comment 获取并修改表或字段注释
  17. 【代码笔记】iOS-NSFileManager
  18. Android开发——Android M(6.0) 权限解决方案
  19. PyCharm 注释
  20. 客户被绑,蒙眼,惊问:“想干什么?” 对方不语,鞭笞之,客户求饶:“别打,要钱?” 又一鞭,“十万够不?” 又一鞭,“一百万?” 又一鞭。客户崩溃:“你们TMD到底要啥?” “要什么?...

热门文章

  1. ref:Mysql授权远程登陆
  2. 洛谷P2671 求和 [数论]
  3. 深入理解Git - Git底层对象
  4. 交换机高级特性MUX VLAN
  5. 查看shell 版本
  6. iOS 11开发教程(十一)了解iOS11应用视图
  7. Django Q对象
  8. [BalticOI2002]Bicriterial routing
  9. Codeforces Round #357 (Div. 2) D. Gifts by the List 水题
  10. FT232H USB转串口,I2C,JTAG高速芯片