Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我需要一些关于动态规划的建议_C++_Dynamic_Large Data - Fatal编程技术网

C++ 我需要一些关于动态规划的建议

C++ 我需要一些关于动态规划的建议,c++,dynamic,large-data,C++,Dynamic,Large Data,问题是: 哈娜是个数学创造者。最初,他有一个数字n。每次执行操作时,他都会删除任何元素x,使x>1,然后按顺序将3号插入相同的位置:地板(x/2)、x模块2、地板(x/2)。他必须继续此操作,直到收到满是0和1的列表 因此,列表是1索引的(列表的第一个索引是1)。实现一个函数sumofone来计算列表中l和r之间的数字1的总数 请注意: 时限为2秒 0首先,除了几个设计缺陷之外,您还有一个严重的内存泄漏问题,因为您在没有正确删除的情况下堆分配了一个本地数组 string* memoize =

问题是: 哈娜是个数学创造者。最初,他有一个数字n。每次执行操作时,他都会删除任何元素x,使x>1,然后按顺序将3号插入相同的位置:地板(x/2)、x模块2、地板(x/2)。他必须继续此操作,直到收到满是0和1的列表

因此,列表是1索引的(列表的第一个索引是1)。实现一个函数sumofone来计算列表中l和r之间的数字1的总数

请注意:

  • 时限为2秒


  • 0首先,除了几个设计缺陷之外,您还有一个严重的内存泄漏问题,因为您在没有正确删除的情况下堆分配了一个本地数组

    string* memoize = new string[n+1];
    
    不要以这种方式在本地执行此操作,请为此使用std::vector:

    auto memoize = std::vector<std::string>(n + 1);
    
    auto memoize=std::vector(n+1);
    
    接下来,您将为每个实际值请求一次又一次地重新创建数组。应避免这种情况,至少对于当前具有完全初始化阵列的解决方案,请使用hana阵列的更“全局”存储位置(预分配最大可能的N)

    对于您实际的算法问题,这里没有更深入的数学见解,并且感觉原始问题的表述更为详细/精确…:

    你将永远无法以可接受的方式用你目前的方法解决这个问题


    关键是:这是一个常见的对数问题类,参见二进制搜索示例。您应该尝试重新设计对递归函数调用访问的数组访问,以便始终通过函数调用访问第n个元素,并且只有前两个元素实际上是“具体的”。首先,如果没有更深入的分析,复杂性应该已经可以降低到O(log(n)*(r-l))左右。我会尝试向您发布解决方案,但请确保首先,您在此处提供了完整的问题描述

    这可能是某个在线编码网站提出的问题。这些网站提出的问题旨在提供适用于小数据的简单解决方案,但对于大数据则会失败。这个问题的真正解决方案很可能不需要您尝试分配TB的内存。当你看到约束条件,如
    n
    范围达
    2^50
    ,这是一个绝对的赠品,解决方案需要某种数学技巧。是的,先生!这是完整的问题描述!如果你能给我一个解决办法,那就太好了。非常感谢。我找到了我自己的解决方案,所以你没有必要发布你的解决方案!我真的很感谢你的帮助!你的建议对我帮助很大!非常感谢你!
    auto memoize = std::vector<std::string>(n + 1);