Submission #577806


Source Code Expand

#include<bits/stdc++.h>
using namespace std;
#define FZ(n) memset((n),0,sizeof(n))
#define FMO(n) memset((n),-1,sizeof(n))
#define F first
#define S second
#define PB push_back
#define ALL(x) begin(x),end(x)
#define SZ(x) ((int)(x).size())
#define IOS ios_base::sync_with_stdio(0); cin.tie(0)
template<typename A, typename B>
ostream& operator <<(ostream &s, const pair<A,B> &p) {
  return s<<"("<<p.first<<","<<p.second<<")";
}
template<typename T>
ostream& operator <<(ostream &s, const vector<T> &c) {
  s<<"[ ";
  for (auto it : c) s << it << " ";
  s<<"]";
  return s;
}
// Let's Fight!

const int MXN = 1005;
const int MXK = 54;
const int INF = 1029384756;

int N, K, ip[MXN];
int dp[MXK][MXN][MXN];
int bk[MXK][MXN][MXN];


int go(int l, int r, int k) {
	if (l == r) return 0;
	if (r-l+1 > (1LL << k)) return INF;
	if (r-l == 1) {
		return ip[r] - ip[l];
	}
	int &ret = dp[k][l][r];
	if (ret != -1) return ret;
	ret = INF;
	go(l, r-1, k);
	go(l+1, r, k);
	int ll = bk[k][l][r-1];
	int rr = bk[k][l+1][r];
	if (ll == -1) ll = l;
	if (rr == -1) rr = r-1;
	/*
	if (r - l <= k) {
		ll = l;
		rr = r-1;
	}
	*/
	for (int m = ll; m<=rr; m++) {
		int c = go(l, m, k-1) + go(m+1,r, k-1) + ip[r] - ip[m];
		if (ret > c) {
			ret = c;
			bk[k][l][r] = m;
		}
	}
	return ret;
}


int main() {
    IOS;
	while (cin >> N >> K) {
		for (int i=0; i<N; i++)
			cin >> ip[i];
		sort(ip, ip+N);
		FMO(dp);
		FMO(bk);

		cout << go(0, N-1, K) << endl;
	}

	return 0;
}

Submission Info

Submission Time
Task K - Optimal Tournament
User bcw0x1bd2
Language C++11 (GCC 4.8.1)
Score 100
Code Size 1536 Byte
Status AC
Exec Time 1637 ms
Memory 427240 KiB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 36
Set Name Test Cases
All 00_sample_00, 00_sample_01, 00_sample_02, 10_naive_rnd_small_000, 10_naive_rnd_small_001, 10_naive_rnd_small_002, 10_naive_rnd_small_003, 10_naive_rnd_small_004, 11_naive_rnd_med_000, 11_naive_rnd_med_001, 11_naive_rnd_med_002, 11_naive_rnd_med_003, 11_naive_rnd_med_004, 12_naive_rnd_large_000, 12_naive_rnd_large_001, 12_naive_rnd_large_002, 12_naive_rnd_large_003, 12_naive_rnd_large_004, 12_naive_rnd_large_005, 12_naive_rnd_large_006, 12_naive_rnd_large_007, 22_near_value_000, 22_near_value_001, 22_near_value_002, 22_near_value_003, 22_near_value_004, 32_minim_K_000, 32_minim_K_001, 32_minim_K_002, 32_minim_K_003, 32_minim_K_004, 42_block_000, 42_block_001, 42_block_002, 42_block_003, 42_block_004
Case Name Status Exec Time Memory
00_sample_00 AC 836 ms 427172 KiB
00_sample_01 AC 830 ms 427064 KiB
00_sample_02 AC 831 ms 427060 KiB
10_naive_rnd_small_000 AC 830 ms 427064 KiB
10_naive_rnd_small_001 AC 831 ms 427064 KiB
10_naive_rnd_small_002 AC 833 ms 427060 KiB
10_naive_rnd_small_003 AC 825 ms 427060 KiB
10_naive_rnd_small_004 AC 822 ms 427060 KiB
11_naive_rnd_med_000 AC 834 ms 427232 KiB
11_naive_rnd_med_001 AC 839 ms 427060 KiB
11_naive_rnd_med_002 AC 829 ms 427060 KiB
11_naive_rnd_med_003 AC 837 ms 427060 KiB
11_naive_rnd_med_004 AC 841 ms 427056 KiB
12_naive_rnd_large_000 AC 1022 ms 427184 KiB
12_naive_rnd_large_001 AC 1084 ms 427188 KiB
12_naive_rnd_large_002 AC 1458 ms 427192 KiB
12_naive_rnd_large_003 AC 1176 ms 427192 KiB
12_naive_rnd_large_004 AC 954 ms 427188 KiB
12_naive_rnd_large_005 AC 1486 ms 427184 KiB
12_naive_rnd_large_006 AC 1279 ms 427192 KiB
12_naive_rnd_large_007 AC 1181 ms 427192 KiB
22_near_value_000 AC 1119 ms 427192 KiB
22_near_value_001 AC 1118 ms 427192 KiB
22_near_value_002 AC 1087 ms 427228 KiB
22_near_value_003 AC 1027 ms 427192 KiB
22_near_value_004 AC 1090 ms 427192 KiB
32_minim_K_000 AC 1016 ms 427184 KiB
32_minim_K_001 AC 1024 ms 427188 KiB
32_minim_K_002 AC 945 ms 427188 KiB
32_minim_K_003 AC 974 ms 427188 KiB
32_minim_K_004 AC 969 ms 427192 KiB
42_block_000 AC 1637 ms 427240 KiB
42_block_001 AC 913 ms 427188 KiB
42_block_002 AC 981 ms 427184 KiB
42_block_003 AC 1053 ms 427220 KiB
42_block_004 AC 981 ms 427192 KiB