Блог пользователя wish_me

Автор wish_me, 7 лет назад, По-английски

Given a sequence of n integers, you have to find out the non-decreasing subsequence of length k with minimum sum. If no sequence exists output -1.

Examples:

Input : [58 12 11 12 82 30 20 77 16 86], k = 3 Output : 39 {11 + 12 + 16}

Input : [58 12 11 12 82 30 20 77 16 86], k = 4 Output : 120 {11 + 12 + 20 + 77}

Input : [58 12 11 12 82 30 20 77 16 86], k = 5 Output : 206

  • Проголосовать: нравится
  • -10
  • Проголосовать: не нравится

»
7 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

If you are looking for a solution than here

»
7 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

what's your expected time complexity?

  • »
    »
    7 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

    In my article which I wrote, the time complexity is O(n^2*k).

    • »
      »
      »
      7 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Looks like O(N^2*K) to me.

      • »
        »
        »
        »
        7 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        let dp[i][j] represents that we pick i-th number, we get a non-decreasing subsequence which has a size of j, the minimum sum of it.

        so naively u can solve it in O(n2 × k)

        with bit/range tree you can optimize to i think?

      • »
        »
        »
        »
        7 лет назад, # ^ |
          Проголосовать: нравится +8 Проголосовать: не нравится

        Can you explain please?

  • »
    »
    7 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    I am expecting knlogn? Is it possible?

    • »
      »
      »
      7 лет назад, # ^ |
      Rev. 4   Проголосовать: нравится 0 Проголосовать: не нравится

      Let's go with i through our array and store k Fenwick trees to find minimum of prefix. Get(bit[j], x) returns minimum sum of non-decreasing subsequence of length j which last element is not greater than x.

      Now we want to continue some sequences with our a[i]. For a certain sequence length j we can make sequence of length (j + 1) with minimum sum S = Get(bit[j], a[i]) + a[i], then minimise(bit[j + 1], a[i], S). Correct me if i'm wrong.