比赛 清华集训2017模板练习 评测结果 AAAAAATTTT
题目名称 货币兑换 最终得分 60
用户昵称 Alex丶Baker 运行时间 4.010 s
代码语言 C++ 内存使用 4.89 MiB
提交时间 2017-07-17 14:18:29
显示代码纯文本
#include<bits/stdc++.h>

#define inf (1<<30)
#define il inline
#define RG register
#define ll long long

using namespace std;

double f[100010],x[100010],y[100010],a[100010],b[100010],r[100010];
int n,s;

il int gi(){
    RG int x=0,q=1; RG char ch=getchar(); while ((ch<'0' || ch>'9') && ch!='-') ch=getchar();
    if (ch=='-') q=-1,ch=getchar(); while (ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return q*x;
}

il void work(){
    n=gi(),s=gi(); for (RG int i=1;i<=n;++i) scanf("%lf%lf%lf",&a[i],&b[i],&r[i]);
    f[1]=(double)s,x[1]=r[1]*f[1]/(r[1]*a[1]+b[1]),y[1]=f[1]/(r[1]*a[1]+b[1]);
    for (RG int i=2;i<=n;++i){
	for (RG int j=0;j<n;++j) f[i]=max(f[i],a[i]*x[j]+b[i]*y[j]);
	f[i]=max(f[i],f[i-1]);
	x[i]=r[i]*f[i]/(r[i]*a[i]+b[i]),y[i]=f[i]/(r[i]*a[i]+b[i]);
    }
    printf("%0.3lf",f[n]); return;
}

int main(){
	freopen("cash.in","r",stdin);
	freopen("cash.out","w",stdout);
    work();
    return 0;
}