Submission #1234351

#TimeUsernameProblemLanguageResultExecution timeMemory
1234351altern23Let's Win the Election (JOI22_ho_t3)C++20
11 / 100
632 ms8376 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ld long double
#define pii pair<ll, ll>
#define fi first
#define sec second

const int MAXN = 5e2;
const ll INF = 2e18;

ll a[MAXN + 5], b[MAXN + 5];
ld dp[2][MAXN + 5][MAXN + 5];
ll sum[MAXN + 5];

int main(){ 
	ll N, K; cin >> N >> K;
	vector<pii> v(1);
	for(int i = 1; i <= N; i++){
		cin >> a[i] >> b[i];
        if(b[i] == -1) b[i] = INF;
		v.push_back({b[i], a[i]});
	}
	
	sort(v.begin(), v.end());
	
	for(int i = 0; i < 2; i++){
		for(int j = 0; j <= N; j++){
			for(int l = 0; l <= N; l++) dp[i][j][l] = INF;
		}
	}	
	
	vector<ll> tmp;
	for(int i = N; i >= 1; --i){
		tmp.push_back(v[i].sec);
		sort(tmp.begin(), tmp.end());
		if(K - (i - 1) >= (int)tmp.size()){
			for(int k = 0; k < K - (i - 1); k++) sum[i] += tmp[k];
		}
		else sum[i] = INF;
	}
	
	ld ans = INF;
	ans = min(ans, (ld)sum[1]);
	for(int i = 0; i <= K; i++) dp[0][0][i] = 0;
	for(int i = 1; i <= K; i++){
		for(int k = 0; k <= i; k++){
			for(int l = 0; l <= K; l++){
				dp[i % 2][k][l] = INF;
				// take buff
				if(k && v[i].fi != INF) dp[i % 2][k][l] = min(dp[i % 2][k][l], dp[(i % 2) ^ 1][k - 1][l] + (1 / (1.0 * k)) * (1.0 * v[i].fi));
				// not take buff
				dp[i % 2][k][l] = min(dp[i % 2][k][l], dp[(i % 2) ^ 1][k][l] + (1 / (1.0 * (l + 1))) * (1.0 * v[i].sec));
			}
		}
		for(int j = 0; j <= i; j++){
			ans = min(ans, sum[i + 1] * (1 / (1.0 * (j + 1))) + dp[i % 2][j][j]);
		}
	}	

	cout << fixed << setprecision(10) << ans << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...