Submission #1309388

#TimeUsernameProblemLanguageResultExecution timeMemory
1309388thuhienneLet's Win the Election (JOI22_ho_t3)C++20
100 / 100
219 ms4420 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

#define re exit(0);

int n,k;
pair <double,double> city[509];

double dp1[509][509],dp2[509][509];
//dp1 i j: min cost de thu phuc toan bo 1 -> i va co j colab
//dp2 i j: min cost de co j vote khi xet den i

int main() {
//  ios_base::sync_with_stdio(0);cin.tie(nullptr);

	cin >> n >> k;
	for (int i = 1;i <= n;i++) {
		cin >> city[i].first >> city[i].second;
		if (city[i].second == -1) city[i].second = 1e18;
	}
	
	sort(city + 1,city + 1 + n,[] (pair <double,double> a,pair <double,double> b) {
		return a.second < b.second;
	});
	
	double res = 1e18;
	
	for (int colab = 0;colab <= k;colab++) {
		
		for (int i = 0;i <= n;i++) for (int j = 0;j <= n;j++) dp1[i][j] = dp2[i][j] = 1e18;
		
		dp1[0][0] = dp2[0][0] = 0;
		
		for (int i = 1;i <= n;i++) {
			for (int j = 0;j <= min(i,colab);j++) {
				dp1[i][j] = dp1[i - 1][j] + city[i].first / (colab + 1);
				if (j) dp1[i][j] = min(dp1[i][j],dp1[i - 1][j - 1] + city[i].second / j);
			}
		}
		
		for (int i = colab;i <= n;i++) {
			dp2[i][i] = dp1[i][colab];
			for (int j = colab;j < i;j++) {
				dp2[i][j] = dp2[i - 1][j];
				
				if (j) dp2[i][j] = min(dp2[i][j],dp2[i - 1][j - 1] + city[i].first / (colab + 1));
			}
		}
		
		res = min(res,dp2[n][k]);
		
	}
	
	cout << setprecision(4) << fixed << res;

}
#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...