Submission #1319604

#TimeUsernameProblemLanguageResultExecution timeMemory
1319604Jawad_Akbar_JJLet's Win the Election (JOI22_ho_t3)C++20
100 / 100
1823 ms16248 KiB
#include <iostream>
#include <vector>
#include <iomanip>
#include <algorithm>

using namespace std;
const int N = 1005;
long double dp[N][N], a[N], b[N], inf = 1000000, Ans = inf, o = 1, cst;

signed main(){
	cout<<fixed<<setprecision(10);
	int n, k;
	cin>>n>>k;

	vector<pair<int, int>> vec = {{0, 0}};

	for (int i=1;i<=n;i++){
		cin>>a[i]>>b[i];
		if (b[i] == -1)
			b[i] = 1001;
		vec.push_back({b[i], a[i]});
	}
	sort(begin(vec) + 1, end(vec));

	for (int c=1;c<=n and vec[c - 1].first != 1001;c++){
		for (int i=0;i<N;i++){
			for (int j=0;j<N;j++)
				dp[i][j] = inf;
		}

		dp[0][0] = 0;

		for (int i=1;i<=n;i++){
			for (int v=0, clb;v<i;v++){
				clb = i - v, cst = 0;
				if (clb < c){
					if (vec[i].first != 1001)
						cst = (o * vec[i].first) / (o * clb);
					else
						cst = inf;
				}
				dp[i][v] = min(dp[i][v], dp[i-1][v] + cst);
			}
			for (int v=1;v<=i;v++)
				dp[i][v] = min(dp[i][v], dp[i-1][v - 1] + (o * vec[i].second) / (o * c));
		}
		Ans = min(Ans, dp[n][k - c + 1]);
	}
	cout<<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...