Submission #1267734

#TimeUsernameProblemLanguageResultExecution timeMemory
1267734enzyLet's Win the Election (JOI22_ho_t3)C++20
23 / 100
2601 ms334096 KiB
#include<bits/stdc++.h>
#define lb long double
using namespace std;
const int maxn=22;
const int inf=1e8;
lb dp[2][maxn][maxn][1000*maxn]; // dp[i][j][k]=min de tempo, para ter j votos e k colaboradores, com os i primeiros caras
pair<int,int> v[maxn];
bool cmp(pair<lb,lb> a, pair<lb,lb> b){
    if(a.second!=b.second){
        if(a.second==-1) return false;
        if(b.second==-1) return true;
        return a.second<b.second;
    }
    return a.first<b.first;
}
int main(){
    ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    int n, m; cin >> n >> m;
    for(int i=1;i<=n;i++) cin>> v[i].first >> v[i].second;
    sort(v+1,v+1+n,cmp);
    for(int i=0;i<=1;i++){
        for(int j=0;j<=n;j++)
            for(int k=0;k<=n+1;k++)
                for(int l=0;l<=1000*n;l++) dp[i][j][k][l]=inf;
        dp[i][0][1][0]=0;
    }
    dp[1][0][1][0]=0; dp[1][1][1][v[1].first]=0; 
    if(v[1].second!=-1) dp[1][1][2][0]=v[1].second;
    lb resp=inf;
    if(m==1) resp=v[1].first;
    for(int i=2;i<=n;i++){
        //cout << i << ": " << endl;
        int par=i%2, inv=1^par;
        for(int j=1;j<=i;j++){
            for(int k=1;k<=j+1;k++){
                for(int l=0;l<=1000*j;l++){
                    lb help=v[i].second; help/=(k-1);
                    dp[par][j][k][l]=min(dp[inv][j][k][l],dp[par][j][k][l]);
                    if(k!=j+1&&l>=v[i].first) dp[par][j][k][l]=min(dp[inv][j-1][k][l-v[i].first],dp[par][j][k][l]);
                    if(k!=1&&v[i].second!=-1) dp[par][j][k][l]=min(dp[inv][j-1][k-1][l]+help,dp[par][j][k][l]);
                    if(j>=m){
                        lb a=l, b=k;
                        resp=min(resp,dp[par][j][k][l]+a/b);
                    }
                }
                //cout << dp[i][j][k] << " ";
            }
            //cout << endl;
        }
        //cout << endl;
    }
    cout << fixed << setprecision(16) << resp << endl;
}
#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...