This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
/*input
20
14
106 277
175 217
170 227
164 245
118 254
139 261
142 270
185 200
162 241
153 239
128 264
103 299
147 248
158 236
160 232
183 205
194 197
135 260
153 234
128 260
*/
#include<bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
typedef tree<long long, null_type, less_equal<long long>, rb_tree_tag, tree_order_statistics_node_update> indexed_set;
#pragma GCC optimize("unroll-loops,no-stack-protector")
//order_of_key #of elements less than x
// find_by_order kth element
using ll = long long;
using ld = long double;
using pii = pair<int,int>;
#define f first
#define s second
#define pb push_back
#define REP(i,n) for(int i=0;i<n;i++)
#define REP1(i,n) for(int i=1;i<=n;i++)
#define FILL(n,x) memset(n,x,sizeof(n))
#define ALL(_a) _a.begin(),_a.end()
#define sz(x) (int)x.size()
#define SORT_UNIQUE(c) (sort(c.begin(),c.end()), c.resize(distance(c.begin(),unique(c.begin(),c.end()))))
const ll INF64=4e18;
const int INF=0x3f3f3f3f;
const ll MOD=1e9+7;
const ld PI=acos(-1);
const ld eps=1e-6;
#define lowb(x) x&(-x)
#define MNTO(x,y) x=min(x,(__typeof__(x))y)
#define MXTO(x,y) x=max(x,(__typeof__(x))y)
ll sub(ll a,ll b){
ll x=a-b;
while(x<0) x+=MOD;
while(x>MOD) x-=MOD;
return x;
}
ll mult(ll a,ll b){
return (a*b)%MOD;
}
ll mypow(ll a,ll b){
if(b<=0) return 1;
ll res=1LL;
while(b){
if(b&1) res=(res*a)%MOD;
a=(a*a)%MOD;
b>>=1;
}
return res;
}
const ll maxn=500+5;
const ll maxlg=__lg(maxn)+2;
ld dp[maxn][maxn],ndp[maxn][maxn];
pii arr[maxn];
int main(){
int n,k;
cin>>n>>k;
int cnt=0;
REP1(i,n){
cin>>arr[i].s>>arr[i].f;
if(arr[i].f==-1) arr[i].f=INF;
else ++cnt;
}
sort(arr+1,arr+n+1);
REP1(i,n){
swap(arr[i].f,arr[i].s);
}
ld ans=INF;
REP(a,min(k,cnt)+1){
REP(i,n+1) REP(j,k-a+1) dp[i][j]=INF;
dp[0][0]=0;
REP1(i,n){
REP(j,i+1){
if(i-j>a){
dp[i][j]=dp[i-1][j];
if(j) MNTO(dp[i][j],dp[i-1][j-1]+(ld)arr[i].f/(a+1));
}
else{
dp[i][j]=(dp[i-1][j]+(ld)arr[i].s/(i-j));
if(j) MNTO(dp[i][j],dp[i-1][j-1]+(ld)arr[i].f/(a+1));
}
}
}
MNTO(ans,dp[n][k-a]);
}
cout<<fixed<<setprecision(20)<<ans<<'\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |