QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#515353#5507. Investors2hukWA 5ms9944kbC++231.5kb2024-08-11 17:17:442024-08-11 17:17:45

Judging History

你现在查看的是最新测评结果

  • [2024-08-11 17:17:45]
  • 评测
  • 测评结果:WA
  • 用时:5ms
  • 内存:9944kb
  • [2024-08-11 17:17:44]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

const int N = 6010;
typedef long long ll;

int n, k, a[N];
ll w[N][N];    // [l, r] 内的逆序对数
ll f[N][N];

void solve(int k, int l, int r, int ql, int qr) {
  // cout << l << ' ' << r << '\n';
  if (l > r) return;
  int mid = l + r >> 1;
  int M = -1;
  for (int i = ql; i <= qr && i < mid; ++ i )
    if (M == -1 || f[k][mid] > f[k - 1][i] + w[i + 1][mid]) {
      f[k][mid] = f[k - 1][i] + w[i + 1][mid];
      M = i;
    }
  // cout << M << '\n';
  solve(k, l, mid - 1, ql, M);
  solve(k, mid + 1, r, M, qr);
}

void add(int x_0, int y_0, int x_1, int y_1) {
  ++ w[x_0][y_0];
  -- w[x_0][y_1 + 1];
  -- w[x_1 + 1][y_0];
  ++ w[x_1 + 1][y_1 + 1];
}

int solve() {
  cin >> n >> k;
  k ++ ; 
  
  for (int i = 1; i <= n; ++ i ) cin >> a[i];
  
  for (int i = 0; i <= n; ++ i )
    for (int j = 0; j <= n; ++ j ) {
      w[i][j] = 0;
      f[i][j] = 1e9;
    }
  
  for (int i = 1; i <= n; ++ i )
    for (int j = i + 1; j <= n; ++ j )
      if (a[i] > a[j]) {
        add(1, j, i, n);
      }
  
  for (int i = 1; i <= n; ++ i )
    for (int j = 1; j <= n; ++ j )
      w[i][j] += w[i - 1][j] + w[i][j - 1] - w[i - 1][j - 1];
  
  for (int i = 1; i <= n; ++ i ) f[1][i] = w[1][i];
  for (int i = 2; i <= k; ++ i ) {
    solve(i, 1, n, 0, n - 1);
  }
  
  return f[k][n];
}

int main() {
  int T;
  cin >> T;
  while (T -- ) cout << solve() << '\n';
  return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 5616kb

input:

2
6 1
4 5 6 2 2 1
6 2
4 5 6 2 2 1

output:

2
0

result:

ok 2 lines

Test #2:

score: -100
Wrong Answer
time: 5ms
memory: 9944kb

input:

349
6 2
2 1 2 1 2 1
48 12
42 47 39 39 27 25 22 44 45 13 5 48 38 4 37 6 24 10 42 38 12 37 31 19 44 6 29 17 7 12 7 26 35 24 15 9 37 3 27 21 33 29 34 20 14 30 31 21
48 12
1 43 17 46 17 39 40 22 25 2 22 12 4 11 38 12 4 11 1 5 39 44 37 10 19 20 42 45 2 45 37 20 48 34 16 41 23 18 13 44 47 21 29 4 23 18 16...

output:

1
18
15
145
0
2
1
0
13
13
23
0
0
0
1
0
0
0
0
0
0
0
0
161
3
0
0
1
0
1000000000
0
0
0
0
1
1000000000
3
0
0
1
0
0
1
0
0
1
4
0
0
0
0
0
0
0
0
2
0
2
0
1000000000
8
280
0
0
34
4
0
1
0
0
3
0
0
0
0
0
0
0
4
0
0
0
0
0
0
0
0
0
0
0
0
0
3
0
0
0
2
0
0
0
0
0
0
0
8
1
8
0
0
0
0
1
11
5
0
0
0
6
0
1000000000
0
0
0
1
0
0...

result:

wrong answer 30th lines differ - expected: '0', found: '1000000000'