답안 #880120

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
880120 2023-11-28T18:37:41 Z serifefedartar Let's Win the Election (JOI22_ho_t3) C++17
22 / 100
426 ms 653056 KB
#include <bits/stdc++.h>
using namespace std;

#define fast ios::sync_with_stdio(0);cin.tie(0);
#define s second
#define f first
typedef long long ll;
const ll MOD = 1e9 + 9;
const ll LOGN = 21;
const ll MAXN = 550;

vector<pair<int,int>> v;
float dp[MAXN][MAXN][MAXN];
int mn[MAXN][MAXN], N, K;
multiset<int> in;
void precalc() {
	for (int i = 1; i < MAXN; i++) {
		for (int j = 0; j < MAXN; j++)
			mn[i][j] = 1000000000;
	}

	for (int k = 1; k <= K; k++) {
		in = multiset<int>();
		int sum = 0;
		for (int i = N; i >= 1; i--) {
			in.insert(v[i].f);
			sum += v[i].f;
			if (in.size() > k) {
				sum -= *prev(in.end());
				in.erase(prev(in.end()));
			}
			mn[k][i] = sum;
		}
	}
}

int main() {
	fast
	cin >> N >> K;

	v = vector<pair<int,int>>(N);
	for (int i = 0; i < N; i++)
		cin >> v[i].f >> v[i].s;
	sort(v.begin(), v.end(), [&](pair<int,int> a, pair<int,int> b) {
		if (a.s == -1 && b.s != -1)
			return false;
		if (b.s == -1)
			return true;
		return (a.s < b.s);
	});
	reverse(v.begin(), v.end());
	v.push_back({-1, -1});
	reverse(v.begin(), v.end());

	precalc(); 

	for (int i = 0; i < MAXN; i++) {
		for (int j = 0; j < MAXN; j++) {
			for (int k = 0; k < MAXN; k++)
				dp[i][j][k] = 1000000000.0;
		}
	}
	for (int i = 0; i < MAXN; i++)
		dp[0][0][i] = 0;

	for (int i = 1; i <= N; i++) {
		if (v[i].s == -1)
			continue;
		for (int exp = 1; exp <= K; exp++) {
			for (int selected = 0; selected < exp; selected++) {
				// A kullan
				if (dp[i-1][selected][exp] + 1.0 * v[i].f / (exp + 1) < dp[i][selected][exp])
					dp[i][selected][exp] = dp[i-1][selected][exp] + 1.0 * v[i].f / (exp + 1);
				// B kullan
				if (dp[i-1][selected][exp] + 1.0 * v[i].s / (selected + 1) < dp[i][selected+1][exp])
					dp[i][selected+1][exp] = dp[i-1][selected][exp] + 1.0 * v[i].s / (selected + 1);
			}
		}
	}

	double ans = 1000000000.0;
	for (int i = 0; i <= N; i++) {
		for (int exp = 0; exp <= K; exp++) {
			if (dp[i][exp][exp] != 1000000000.0) {
				int rem_req = K - i;
				if (rem_req < 0)
					continue;

				if (dp[i][exp][exp] + mn[rem_req][i+1] * 1.0 / (exp + 1) < ans)
					ans = dp[i][exp][exp] + mn[rem_req][i+1] * 1.0 / (exp + 1);
			}
		}
	}

	cout << setprecision(15) << fixed << ans << "\n";
}

Compilation message

Main.cpp: In function 'void precalc()':
Main.cpp:28:18: warning: comparison of integer expressions of different signedness: 'std::multiset<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   28 |    if (in.size() > k) {
      |        ~~~~~~~~~~^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 218 ms 652684 KB Output is correct
2 Correct 122 ms 652984 KB Output is correct
3 Correct 118 ms 652700 KB Output is correct
4 Correct 136 ms 652748 KB Output is correct
5 Runtime error 13 ms 344 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 218 ms 652684 KB Output is correct
2 Correct 122 ms 652984 KB Output is correct
3 Correct 118 ms 652700 KB Output is correct
4 Correct 136 ms 652748 KB Output is correct
5 Runtime error 13 ms 344 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 118 ms 652720 KB Output is correct
2 Correct 119 ms 652612 KB Output is correct
3 Correct 116 ms 652536 KB Output is correct
4 Correct 120 ms 652604 KB Output is correct
5 Correct 118 ms 652652 KB Output is correct
6 Correct 118 ms 652580 KB Output is correct
7 Correct 118 ms 652600 KB Output is correct
8 Correct 115 ms 652692 KB Output is correct
9 Correct 138 ms 652628 KB Output is correct
10 Correct 116 ms 652648 KB Output is correct
11 Correct 117 ms 652560 KB Output is correct
12 Correct 117 ms 652624 KB Output is correct
13 Correct 127 ms 652624 KB Output is correct
14 Correct 118 ms 652628 KB Output is correct
15 Correct 132 ms 652628 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 118 ms 652720 KB Output is correct
2 Correct 119 ms 652612 KB Output is correct
3 Correct 116 ms 652536 KB Output is correct
4 Correct 120 ms 652604 KB Output is correct
5 Correct 118 ms 652652 KB Output is correct
6 Correct 118 ms 652580 KB Output is correct
7 Correct 118 ms 652600 KB Output is correct
8 Correct 115 ms 652692 KB Output is correct
9 Correct 138 ms 652628 KB Output is correct
10 Correct 116 ms 652648 KB Output is correct
11 Correct 117 ms 652560 KB Output is correct
12 Correct 117 ms 652624 KB Output is correct
13 Correct 127 ms 652624 KB Output is correct
14 Correct 118 ms 652628 KB Output is correct
15 Correct 132 ms 652628 KB Output is correct
16 Correct 117 ms 652624 KB Output is correct
17 Correct 123 ms 652624 KB Output is correct
18 Correct 116 ms 652588 KB Output is correct
19 Correct 116 ms 652672 KB Output is correct
20 Correct 131 ms 652612 KB Output is correct
21 Runtime error 12 ms 348 KB Execution killed with signal 11
22 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 118 ms 652720 KB Output is correct
2 Correct 119 ms 652612 KB Output is correct
3 Correct 116 ms 652536 KB Output is correct
4 Correct 120 ms 652604 KB Output is correct
5 Correct 118 ms 652652 KB Output is correct
6 Correct 118 ms 652580 KB Output is correct
7 Correct 118 ms 652600 KB Output is correct
8 Correct 115 ms 652692 KB Output is correct
9 Correct 138 ms 652628 KB Output is correct
10 Correct 116 ms 652648 KB Output is correct
11 Correct 117 ms 652560 KB Output is correct
12 Correct 117 ms 652624 KB Output is correct
13 Correct 127 ms 652624 KB Output is correct
14 Correct 118 ms 652628 KB Output is correct
15 Correct 132 ms 652628 KB Output is correct
16 Correct 117 ms 652624 KB Output is correct
17 Correct 123 ms 652624 KB Output is correct
18 Correct 116 ms 652588 KB Output is correct
19 Correct 116 ms 652672 KB Output is correct
20 Correct 131 ms 652612 KB Output is correct
21 Runtime error 12 ms 348 KB Execution killed with signal 11
22 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 391 ms 653056 KB Output is correct
2 Correct 426 ms 652824 KB Output is correct
3 Correct 391 ms 652628 KB Output is correct
4 Correct 395 ms 652820 KB Output is correct
5 Correct 397 ms 652820 KB Output is correct
6 Correct 399 ms 652816 KB Output is correct
7 Correct 398 ms 652816 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 218 ms 652684 KB Output is correct
2 Correct 122 ms 652984 KB Output is correct
3 Correct 118 ms 652700 KB Output is correct
4 Correct 136 ms 652748 KB Output is correct
5 Runtime error 13 ms 344 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -