Submission #1350835

#TimeUsernameProblemLanguageResultExecution timeMemory
1350835ereringLet's Win the Election (JOI22_ho_t3)C++20
21 / 100
594 ms6428 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pb push_back
const int N=500+5,MAXN=1e5+5,MAXA=1e6+5,inf=1e9,MOD=998244353;
int mn[N][N];
long double dp[N][N];
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int n,k; cin>>n>>k;
    pair<int,int> p[n];
    for(int i=0;i<n;i++){
        cin>>p[i].second>>p[i].first;
        if(p[i].first==-1)p[i].first=inf;
    }
    sort(p,p+n);
    multiset<int> ms;
    for(int i=n-1;i>=0;i--){
        ms.insert(p[i].second);
        int cur=0,sum=0;
        for(auto j:ms){
            mn[i][cur]=sum;
            sum+=j; cur++;
        }
        mn[i][cur]=sum;
    }
    long double ans=inf;
    for(int am=0;am<=k;am++){
        for(int i=0;i<N;i++){
            for(int j=0;j<N;j++)dp[i][j]=inf;
        }
        dp[0][0]=p[0].second/(am+1);
        if(am)dp[0][1]=p[0].first;
        long double sol=inf;
        if(am==0)sol=dp[0][0]+(long double)mn[1][k-1];
        if(am==1)sol=min(sol,dp[0][1]+(long double)mn[1][k-1]/(long double)(2));
        for(int i=1;i<n;i++){
            for(int j=0;j<=min(am,i+1);j++){
                dp[i][j]=dp[i-1][j]+(long double)p[i].second/(long double)((am+1));
                if(j)dp[i][j]=min(dp[i][j],dp[i-1][j-1]+(long double)p[i].first/(long double)(j));
                if(j==am && k-i-1>=0)sol=min(sol,dp[i][j]+(long double)mn[i+1][k-i-1]/(long double)((am+1)));
            }
        }
        ans=min(ans,sol);
    }
    cout<<setprecision(15)<<ans;
}
#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...