python - 从数量小于或等于N的数字列表中最小化或找到n个理想子和

标签 python c++ dynamic tree subset-sum

给定一个数字列表,lst = [1, 1, 2, 4, 3, 2, 1, 1, 1, 2, 1, 4, 3, 1]我如何找到小于或等于4的理想列表数量?

这里有很多可能性。目标是最大程度地减少可能的列表数量。该程序将需要创建类似于以下内容的子集列表:{4}, {4}, {3, 1}, ... , {1, 1}

请注意,最后一个列表子集不等于4,而是更少。由于以下原因,此问题很困难:

  • 程序必须能够找到小于或等于和的subset-sums
  • 该程序需要首先通过首先查看最大
  • 将原始列表中的值从子列表中删除

    最佳答案

    这是我的尝试。
    总体思路是对列表进行排序,然后从左向右移动,并在每次迭代中贪婪地选择最大的子集。时间复杂度为O(n)

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    int main()
    {
        std::vector<int> lst{1, 1, 2, 4, 3, 2, 1, 1, 1, 2, 1, 4, 3, 1};
        std::sort(lst.begin(),lst.end()); //sort the list
        int target = 4;
    
        int left = 0;
        int right = lst.size()-1;
    
        std::vector<std::vector<int>> solutions;
        while (left<right ){
            if(lst[left] > target)   // break if no solutions
                break;
    
            if(lst[right] > target) // ignore larger right values
                right--;
    
    
            if(lst[right]<=target){   // while the total sum is less than target, keep adding the elements
                std::vector<int> subset;
                subset.push_back(lst[right]);
                int sum = lst[right];
                while(left<right && lst[left]+sum<=target){
                    sum+=lst[left];
                    subset.push_back({lst[left]});
                    left++;
                }
                solutions.push_back(subset);
                right--;
            }
    
        }
    
        for(auto& ss : solutions){
            std::cout<<'{';
            for(auto n:ss){
                std::cout<<n<<',';
            }
            std::cout<<"\b}";
            std::cout<<std::endl;
        }
    
    }
    

    关于python - 从数量小于或等于N的数字列表中最小化或找到n个理想子和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59316074/

    相关文章:

    c# - 如何在类似于 phpMyAdmin 的 asp.net 中创建动态表/字段

    c - 无法正确读取 .bmp 头文件

    python - 帮助了解 *nixes 中的 Python 结构

    Python:检测输入仅适用于 1 个字符长的字符串

    c++ - 如何在不使用Visual Studio的情况下用C++制作Win32应用程序?

    c++ - opencv 是如何工作的?

    c# - 使用动态/DLR 的 DynamicProxy

    python - Pandas Merge - 如何避免重复列

    python - Numpy 在行对中应用函数并累积结果

    c++ - 复制回调?