Total Submissions: 175 (36 users) Accepted: 34 (28 users)
[ My Solution]
7 40
5 30
3 20
#include<iostream>
#include <stdio.h>
#include<string.h>
#include <algorithm>
using namespace std;
typedef struct infor{
int time;
double score;
}infor;
bool cmp(infor a,infor b){
if(a.score/a.time==b.score/b.time)
return a.time>b.time;
else
return a.score/a.time>b.score/b.time;
}
int main()
{
int N;
double T;
while(cin>>N>>T){
infor s[1002];
int i;
for(i=0;i<N;i++){
cin>>s[i].time>>s[i].score;
}
sort(s,s+N,cmp);
int t=0;
double s1=0,dp[1002];
double max=0;
memset(dp,0,sizeof(dp));
dp[0]=0;
for(i=0;i<N;i++)
{
for(int v=T;v>=s[i].time;v--)
{
t=s[i].time;
s1=s[i].score*(1-v/T);
if(dp[v]<(dp[v-t]+s1))
dp[v]=dp[v-t]+s1;
max=max<dp[v]?dp[v]:max;
}
}
printf("%.8lf\n",max);
}
return 0;
}