제출 #1188029

#제출 시각아이디문제언어결과실행 시간메모리
1188029user736482Let's Win the Election (JOI22_ho_t3)C++20
100 / 100
1736 ms8516 KiB
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pb push_back
#define ff first
#define ss second
#define MOD 1000000009
#define INF 1000000019
#define INFL 1000000000000000099LL
ll a,b,c,d,t,n,m,l,q,k,ak;
ld ans=INFL,ak2;

vector<pair<ld,ld>>in;

ld dp1[507][507];//dla sufiksu i chcac j glosow
ld dp2[507][507];//dla prefiksu i-1, majac j-1 pomocnikow

void f(ll x){
    for(ll i=0;i<507;i++){
        dp1[i][0]=0;
        dp2[i][0]=INFL;
        for(ll j=1;j<507;j++){
            dp1[i][j]=INFL;
            dp2[i][j]=INFL;
        }
    }
    for(ll i=n-1;i>=0;i--){
        for(ll j=1;j<=k;j++){
            dp1[i][j]=min(dp1[i+1][j],dp1[i+1][j-1]+in[i].ss/(x+1));
        }
    }
    dp2[0][1]=0;
    for(ll i=1;i<=n;i++){
        for(ll j=1;j<=k+1;j++){
            dp2[i][j]=min(dp2[i-1][j]+in[i-1].ss/(x+1),dp2[i-1][j-1]+(j!=1)*(in[i-1].ff/(j-1)));
        }
    }
    for(ll i=0;i<=n;i++){
        ans=min(ans,dp2[i][x+1]+dp1[i][max(0LL,k-i)]);
    }
}

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>n>>k;
    for(ll i=0;i<n;i++){
        cin>>a>>b;
        if(b==-1)b=INFL;
        in.pb({b,a});
    }
    sort(in.begin(),in.end());
    for(ll i=0;i<k;i++)f(i);
    cout<<setprecision(20)<<ans;
    return 0;
}
#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...