zoukankan      html  css  js  c++  java
  • 410. 分割数组的最大值

    题目

    410. 分割数组的最大值

    我的思路

    原本有一个贪心算法的思路,仔细推敲后发现有bug。

    根据官方题解:有动态规划和二分贪心两种解决思路。

    我的实现

    class Solution {
    public:
        int splitArray(vector<int>& nums, int m) {
            //初始化sum数组
            vector<long> temp(nums.size(),0);
            vector<vector<long>> sums(nums.size(),temp);
            for(int i=0;i<nums.size();i++){
                sums[i][i]=nums[i];
                for(int j=i+1;j<nums.size();j++){
                    sums[i][j]=sums[i][j-1]+nums[j];
                }
            }
            vector<long> temp2(m+1,-1);
            vector<vector<long>> f(nums.size()+1,temp2);
            for(int i=0;i<=nums.size();i++){f[i][0]=0;}
    
            for(int j=0;j<=m;j++){
                for(int i=j;i<=nums.size();i++){
                    for(int m=j-1;m>=0&&m<=i-1;m++){
                        if(f[i][j]==-1){ f[i][j]=max(f[m][j-1],sums[m][i-1]);printf("??f[%d][%d]=%d
    ",i,j,f[i][j]);}
                        else if(j-1>0)
                        f[i][j]=min(f[i][j],max(f[m][j-1],sums[m][i-1]));
                    }
                     printf("check%d %d %d
    ",i,j,f[i][j]);
                }
            }
            return  f[nums.size()][m];
        }
    };
    /*
    官方题解思路1:动态规划
    f[i][j]存储,前i(0...i-1)个元素被分成j个子数组,j个子数组各自和的最大值的最小值。
    状态转移方程:f[i][j]=min{max(f[m][j-1],sum(m,i))},m=j-1,j,j+1,...i-1  
    可以提前先把所有的sum(a,b)存到一个辅助数组中供重复使用
    初始状态:f[n][0]=0;
    
    我的思路
    切分成m个非空连续子数组。先把所有数组元素看成n个叶子结点排成一排,两个节点刻意合并用它们的和代替原来的两个节点,连续合并n-m次,剩下m棵子树,他们的根节点
    我想到用贪心的思路,每次合并的两个节点,是所有可能合并节点和最小的。
    证明:在存在i个数组的情况下,
    我的思路有漏洞!!!!
    
    */

    时间复杂度:n^2*m

    空间复杂度:n^2可以降到n,用减法!

    二分+贪心待实现。

    拓展学习

    本题可能还需要复习+练习

  • 相关阅读:
    yun rpm
    Codeforces Round #375 (Div. 2) D. Lakes in Berland (DFS或并查集)
    51nod 1276 1276 岛屿的数量 (很好玩的题目
    玄学C语言之scanf,printf
    51nod 算法马拉松17 解题报告 以后不能赛中写题解(查逐梦者抄袭本人代码...
    51Nod 1007 正整数分组 -简单DP
    算法马拉松13 A-E解题报告
    十五天集训_
    贴一发STL源码
    省赛反思以及未来提高计划
  • 原文地址:https://www.cnblogs.com/BoysCryToo/p/13378584.html
Copyright © 2011-2022 走看看