제출 #1182686

#제출 시각아이디문제언어결과실행 시간메모리
1182686PieArmyLet's Win the Election (JOI22_ho_t3)C++20
100 / 100
158 ms2416 KiB
#include<bits/stdc++.h> typedef long long ll; #define pb push_back #define fr first #define sc second using namespace std; int n,k; double a[501],b[501]; double dp[501][501]; int per[501]; double cal(double m){ double x=k-m; for(int i=0;i<=n;i++){ for(int j=0;j<=x;j++){ dp[i][j]=1e11; } } dp[0][0]=0; for(int i=1;i<=n;i++){ for(int j=0;j<=x;j++){ if(j>i)continue; if(j){ dp[i][j]=min(dp[i][j],dp[i-1][j-1]+(a[per[i]]/double(m+1))); } if(i!=j){ if(b[per[i]]>0&&i-j<=m)dp[i][j]=min(dp[i][j],dp[i-1][j]+(b[per[i]]/double(i-j))); else if(i-j>m)dp[i][j]=min(dp[i][j],dp[i-1][j]); } } } return dp[n][int(x)]; } int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); cin>>n>>k; int m=0; for(int i=1;i<=n;i++){ cin>>a[i]>>b[i]; if(b[i]!=-1)m++; } iota(per+1,per+n+1,1); sort(per+1,per+n+1,[&](const int &x,const int &y){ if(b[x]==-1)return false; if(b[y]==-1)return true; return b[x]<b[y]; }); double ans=1e11; for(int i=0;i<=min(m,k);i++){ ans=min(ans,cal(i)); } cout<<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...