Submission #1276247

#TimeUsernameProblemLanguageResultExecution timeMemory
1276247enzyLet's Win the Election (JOI22_ho_t3)C++20
100 / 100
488 ms5464 KiB
#include<bits/stdc++.h> using namespace std; #define lb long double const int maxn=510; const int inf=1e9+7; bool cmp(pair<int,int> x, pair<int,int> y){ if(x.second!=y.second){ if(x.second==-1) return false; if(y.second==-1) return true; return x.second<y.second; } return x.first>y.first; } int a[maxn], b[maxn], dp1[maxn][maxn]; lb dp2[maxn][maxn]; int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int n, k; cin >> n >> k; vector<pair<int,int>>process(n); for(pair<int,int> &p : process) cin >> p.first >> p.second; sort(process.begin(),process.end(),cmp); for(int i=1;i<=n;i++){ a[i]=process[i-1].first; b[i]=process[i-1].second; } memset(dp1,1,sizeof(dp1)); dp1[n+1][0]=0; for(int i=n;i>=1;i--){ for(int j=0;j<=n;j++){ dp1[i][j]=dp1[i+1][j]; if(j) dp1[i][j]=min(dp1[i][j],dp1[i+1][j-1]+a[i]); } } lb resp=dp1[1][k]; for(int x=1;x<=k;x++){ //pegar x caras para serem colaboradores if(b[x]==-1) break; for(int i=0;i<=n;i++) for(int j=0;j<=x;j++) dp2[i][j]=inf; //cout << x << ":\n"; dp2[0][0]=0; for(int i=1;i<=n;i++){ for(int j=0;j<=x;j++){ dp2[i][j]=dp2[i-1][j]; lb c1=(lb)a[i]/(lb)(x+1), c2=inf; if(j&&b[i]!=-1) c2=(lb)b[i]/(lb)j; //cout << c1 << " " << c2 << endl; dp2[i][j]=min(dp2[i-1][j]+c1,dp2[i-1][j-1]+c2); } lb aux=0; if(i<=k) aux=dp1[i+1][k-i]; aux/=(lb)(x+1); resp=min(resp,dp2[i][x]+aux); //cout << i << ' ' << dp2[i][x] << " " << aux << 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...