• 算法


    题目分析

    给定n个整数组成的序列,要求将序列分割为m段,每段子序列中的数在原序列中连续排列,求使得子段和的最大值达到最小的分割方法

    解题方法

    状态转移方程

    State[i][j]表示前i个数据分成j段得到的最大最小值,比较前k个数据的j-1分段的值与k到i的值的最大值,其中k到i的最大值为state[i][1]-state[k][1]

    运行结果

     

    代码

    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int MAX_C = 100;
    int state[MAX_C][MAX_C];
    int a[MAX_C];
    int Min(int n, int m) {
        int i, j, k, temp, Min;
        state[0][1] = 0;
        for (i = 1; i <= n; i++) {
            state[i][1] = state[i - 1][1] + a[i];
        }
        for (i= 2; i <= n; i++) {
            for (j =2; j <= m; j++) {
                temp = 1000000;
                for (k = 1; k < i; k++) {
                    Min = state[i][1] - state[k][1] > state[k][j - 1] ? (state[i][1] - state[k][1]) : state[k][j - 1];
                    if (temp > Min) temp = Min;
                }
                state[i][j] = temp;
            }
        }
        return state[n][m];
    }
    int main() {
        int n = 0, m = 0;
        int temp = 0;
        int Max = 0;
        while (cin >> n&&n) {
            cin >> m;
            memset(a, 0, sizeof(a));=
            for (int i = 1; i <= n; i++) {
                cin >> a[i];
            }
            memset(state, 0, sizeof(state));
            cout << Min(n, m) << endl;
        }
        return 0;
    }
  • 相关阅读:
    微信支付退款部分代码
    Raspberry PI 点亮LED
    Raspberry PI 摄像头
    RaspberryPI 3B系统烧录
    MySQL基础使用
    MySQL数据库管理系统概述
    Eclipse创建JAVA项目
    Brup Suite拦截https请求
    Github 第一个仓库
    python os模块主要函数
  • 原文地址:https://www.cnblogs.com/liutianchen/p/8506112.html
Copyright © 2020-2023  润新知