Submission #863835

#TimeUsernameProblemLanguageResultExecution timeMemory
863835phoenix0423Let's Win the Election (JOI22_ho_t3)C++17
10 / 100
827 ms5004 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<double, double> pll;
#define fastio ios::sync_with_stdio(false), cin.tie(0)
#pragma GCC optimize("Ofast")
#define pb push_back
#define eb emplace_back
#define f first
#define s second
#define lowbit(x) x&-x
const int maxn = 2e5 + 5;
const double INF = 8e18;

int main(void){
	fastio;
	int n, k;
	cin>>n>>k;
	vector<pll> a(n);
	for(int i = 0; i < n; i++){
		cin>>a[i].f>>a[i].s;
		if(a[i].s == -1) a[i].s = INF;
	}
	sort(a.begin(), a.end(), [&](pll a, pll b){ return a.s < b.s;});
	vector<vector<double>> dp(n + 5, vector<double>(n + 5, INF));
	dp[0][1] = 0;
	for(int i = 0; i < n; i++){
		auto [v0, v1] = a[i];
		vector<vector<double>> ndp(dp);
		for(int j = 0; j <= k; j++){
			for(int cnt = 1; cnt <= k; cnt++){
				ndp[j + 1][cnt] = min(ndp[j + 1][cnt], dp[j][cnt] + v0 / cnt);
				if(v1 != -1) ndp[j + 1][cnt + 1] = min(ndp[j + 1][cnt + 1], dp[j][cnt] + v1 / cnt);
			}
		}
		swap(dp, ndp);
	}
	double ans = INF;
	for(int cnt = 1; cnt <= k; cnt++){
		ans = min(ans, dp[k][cnt]);
	}
	cout<<fixed<<setprecision(5)<<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...