Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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
Algorithm 在两点切割杆,且一件长度大于L_Algorithm_Dynamic Programming - Fatal编程技术网

Algorithm 在两点切割杆,且一件长度大于L

Algorithm 在两点切割杆,且一件长度大于L,algorithm,dynamic-programming,Algorithm,Dynamic Programming,我们有一根S厘米长的棍子。它只能在某些位置断开。我们想计算好的对的数量。它满足以下条件 一对好的木棍由两个不同的位置组成,木棍可以在这两个位置断开 当斗杆在这两个位置断裂时,应至少有一个斗杆的长度严格大于L 现在我们得到S,棍子的长度,设为10,棍子可以折断的位置总数N(比如3)。设点为[1,3,9]。让我是5,这里的答案是3 Pair 1 : [1,9] Pair 2 : [1,3] Pair 3 : [3,9] 如果我们切割任何一对,那么它们的长度总是大于L 我只需要数一对。N^2对中的

我们有一根S厘米长的棍子。它只能在某些位置断开。我们想计算好的对的数量。它满足以下条件

  • 一对好的木棍由两个不同的位置组成,木棍可以在这两个位置断开
  • 当斗杆在这两个位置断裂时,应至少有一个斗杆的长度严格大于L
  • 现在我们得到S,棍子的长度,设为10,棍子可以折断的位置总数N(比如3)。设点为[1,3,9]。让我是5,这里的答案是3

    Pair 1 : [1,9] 
    Pair 2 : [1,3]
    Pair 3 : [3,9]
    
    如果我们切割任何一对,那么它们的长度总是大于L

    我只需要数一对。N^2对中的每一对我们都不能选。我想他们一定是用了某种DP方法。请帮忙解决这个问题

    约束条件

    3<=S<=5*10^4
    2<=N<= MIN(S-1,10^4)
    0<=L<=S-1
    All Array element are distinct and 1<=A[i]<=S-1.
    
    3对你的观点进行排序

    直觉

    如果一对连续元素
    (i,i+1)
    是有效的切点,因为
    a[i+1]-a[i]>L
    ,那么
    i+1
    之后与
    i
    结合的所有点以及
    i
    之前与
    i+1
    结合的所有点也是如此,原因相同

    对于
    A[i]>L
    S-A[i+1]>L
    的情况也添加一个

    泛化

    如果两个连续的点不好,那么您需要检查
    (i,i+2)
    ,然后检查
    (i,i+3)
    等。为了有效地执行此操作,对于每个
    i
    ,二进制搜索后一个好的点:

    A[i + k] - A[i] > L
    =>
    A[i + k] > L + A[i]
    

    因此,二进制搜索最小的
    A[i+k]
    大于
    L+A[i]

    @nwellnhof-i将其推广。@IVlad如何进行二进制搜索?请添加一个伪代码来制作东西clear@user3840069-不,我不会。您不断地问这些问题,并期望每次都能在盘子上提供完整的解决方案。“这次我不干了。”艾夫拉德:好的。塔克斯help@IVlad如果我没有错的话,你是这样说的:long ans=0;排序(cutPoints.begin()、cutPoints.end());对于(int i=0;i