范围最小查询

时间:2017-03-17 09:24:28

标签: arrays algorithm dynamic-programming

我有一个数组2d数组A[n][k]其中n,k<=1000和数组cost[n][n],我正在执行这样的操作 (最初A中的所有元素都是0

for(int i=1; i<=n; i++) {

   for(int j=0; j<min(k,i); j++) {

      int min = Max_Value;

      for(int r=0; r<i; r++) {
         min = min(min,A[r][j]+cost[r][i]);
      }
      A[i][j+1]=min
   }
}

我的代码的时间复杂度 O(N K N)我可以将其减少为 O(N K logN) ,我不知道如何使用段树。对于代码,您可以看到它是动态编程。

1 个答案:

答案 0 :(得分:-1)

我猜这样的事情会起作用

创建二维数组B[k][n]

for(int i=1;i<=n;i++){

   for(int j=0;j<min(k,i);j++){

    int min =  Query(1,i-1,B[j]); // Min Value

    A[i][j+1] = min

    }

  for(int i=0;i<n;i++){

         update A[i] such that B[][i] gets updated   
}
}