最小m段和

原创 2017年01月02日 21:13:41

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

题目类型:动态规划

题目分析:

n个数字,分成m段,使这m段子序列的和的最大值达到最小
状态转移方程:s[i][j]=min{max{s[i][1]-s[k][1],s[k][j-1]}}
s[i][j]表示 前i个数字分成j段。
可以这样理解,1 2 3…k…i,前k个数据的(j-1)段的值与(k到i)的值的最大值,其中k到i的值就是上面s[i][1]-s[k][1]的值。
代码如下:

#include<stdio.h>
#include<string.h>
int a[20];
int s[100][100];
int set(int n,int m)
{
    int i,j,k,temp,maxsum;
    for(i=1;i<=n;i++) {  //s[i][1]表示前i个数字分成1段的值,即前i个数字之和   
        s[i][1]=s[i-1][1]+a[i];
    }
    for(j=2;j<=m;j++) {    //从2开始,分割为m段 
        //将前i个数字分割成j段(最小需要j个数字,从i=j开始即可,无需从2开始)
        for(i=j;i<=n;i++) {
            temp=10000000;
            for(k=j;k<i;k++) {
                maxsum=(s[i][1]-s[k][1])>s[k][j-1]?(s[i][1]-s[k][1]):s[k][j-1];
                if(temp>maxsum) {
                    temp=maxsum;
                }
            }
            s[i][j]=temp;
        }
    }
    return s[n][m];
}

int main()
{
    int i,j,n,m;
    scanf("%d%d",&n,&m);
    memset(s,0,sizeof(s));
    for(i=1;i<=n;i++) {
        scanf("%d",&a[i]);
    }
    memset(s,0,sizeof(s));
    printf("%d\n",set(n,m));
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

最小m段和问题

/******************************************************************** ** @file njupt1230.cpp **...

算法 最小M段和问题

题目给定n个整数组成的序列,现在要求将序列分割为m段,每段子序列中的数在原序列中连续排列。 如何分割才能使这m段子序列的和的最大值达到最小? 分析动态规划。 方程: f[i][j] = min{...

南邮 OJ 1230 最小m段和问题

最小m段和问题 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 114            测试通过...

最小M段和 O(nlogn)快速算法

先声明,这算法我还没弄出来《数列分割》解题报告[题目描述]给出一个长为N的整数数列(N≤15000),要求求出最小的M,使得存在一种将数列分成恰好K份的方案(每份是数列上连续的一段,且不得为空),每份...

校OJ 最大m段乘积和最小m段和

描述:给一个n位的数和m,代表将n位数分成m段,求最大m段乘积和最小m段和,同样也可以求m段的最小积和最大和,原理一样 刚开始的时候并没有做得出来,因为dp的状态转移方程写错了,还是太嫩了,...

M8最小系统图

  • 2012年02月09日 00:16
  • 248KB
  • 下载

m序列基于最小二乘辨识系统

  • 2009年04月30日 17:08
  • 1KB
  • 下载

【POJ 3686】【最小费用最大流或者KM算法 指派问题变形(需要拆点)】The Windy's n个玩具指派给m个工厂生产

传送门:POJ 3686 The Windy's 描述: The Windy's Time Limit: 5000MS   Memory Limit: 65536K Total Sub...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最小m段和
举报原因:
原因补充:

(最多只允许输入30个字)