답안 #880116

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
880116 2023-11-28T18:23:03 Z serifefedartar Let's Win the Election (JOI22_ho_t3) C++17
22 / 100
425 ms 652884 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.0, -1.0});
	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 206 ms 652652 KB Output is correct
2 Correct 118 ms 652708 KB Output is correct
3 Correct 120 ms 652672 KB Output is correct
4 Correct 123 ms 652744 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 206 ms 652652 KB Output is correct
2 Correct 118 ms 652708 KB Output is correct
3 Correct 120 ms 652672 KB Output is correct
4 Correct 123 ms 652744 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 117 ms 652564 KB Output is correct
2 Correct 126 ms 652728 KB Output is correct
3 Correct 121 ms 652724 KB Output is correct
4 Correct 117 ms 652628 KB Output is correct
5 Correct 123 ms 652692 KB Output is correct
6 Correct 116 ms 652616 KB Output is correct
7 Correct 117 ms 652600 KB Output is correct
8 Correct 120 ms 652648 KB Output is correct
9 Correct 144 ms 652624 KB Output is correct
10 Correct 116 ms 652720 KB Output is correct
11 Correct 119 ms 652624 KB Output is correct
12 Correct 118 ms 652684 KB Output is correct
13 Correct 117 ms 652760 KB Output is correct
14 Correct 126 ms 652764 KB Output is correct
15 Correct 126 ms 652640 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 117 ms 652564 KB Output is correct
2 Correct 126 ms 652728 KB Output is correct
3 Correct 121 ms 652724 KB Output is correct
4 Correct 117 ms 652628 KB Output is correct
5 Correct 123 ms 652692 KB Output is correct
6 Correct 116 ms 652616 KB Output is correct
7 Correct 117 ms 652600 KB Output is correct
8 Correct 120 ms 652648 KB Output is correct
9 Correct 144 ms 652624 KB Output is correct
10 Correct 116 ms 652720 KB Output is correct
11 Correct 119 ms 652624 KB Output is correct
12 Correct 118 ms 652684 KB Output is correct
13 Correct 117 ms 652760 KB Output is correct
14 Correct 126 ms 652764 KB Output is correct
15 Correct 126 ms 652640 KB Output is correct
16 Correct 135 ms 652608 KB Output is correct
17 Correct 116 ms 652604 KB Output is correct
18 Correct 120 ms 652884 KB Output is correct
19 Correct 117 ms 652628 KB Output is correct
20 Correct 141 ms 652624 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 117 ms 652564 KB Output is correct
2 Correct 126 ms 652728 KB Output is correct
3 Correct 121 ms 652724 KB Output is correct
4 Correct 117 ms 652628 KB Output is correct
5 Correct 123 ms 652692 KB Output is correct
6 Correct 116 ms 652616 KB Output is correct
7 Correct 117 ms 652600 KB Output is correct
8 Correct 120 ms 652648 KB Output is correct
9 Correct 144 ms 652624 KB Output is correct
10 Correct 116 ms 652720 KB Output is correct
11 Correct 119 ms 652624 KB Output is correct
12 Correct 118 ms 652684 KB Output is correct
13 Correct 117 ms 652760 KB Output is correct
14 Correct 126 ms 652764 KB Output is correct
15 Correct 126 ms 652640 KB Output is correct
16 Correct 135 ms 652608 KB Output is correct
17 Correct 116 ms 652604 KB Output is correct
18 Correct 120 ms 652884 KB Output is correct
19 Correct 117 ms 652628 KB Output is correct
20 Correct 141 ms 652624 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 397 ms 652624 KB Output is correct
2 Correct 394 ms 652628 KB Output is correct
3 Correct 416 ms 652752 KB Output is correct
4 Correct 389 ms 652680 KB Output is correct
5 Correct 391 ms 652624 KB Output is correct
6 Correct 394 ms 652824 KB Output is correct
7 Correct 425 ms 652684 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 206 ms 652652 KB Output is correct
2 Correct 118 ms 652708 KB Output is correct
3 Correct 120 ms 652672 KB Output is correct
4 Correct 123 ms 652744 KB Output is correct
5 Runtime error 13 ms 344 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -