SSL2759 2017年10月6日提高组T2 挖矿(dp)

来源:互联网 发布:如何快速升淘宝等级 编辑:程序博客网 时间:2024/06/05 06:41

2017年10月6日提高组T2 挖矿

Description

这里写图片描述

Input

这里写图片描述

Output

这里写图片描述

分析:正着做显然不可做,因为有后效性所以无法DP,所以我们考虑倒着做我们不难设f[i] 表示i-n 这些星球的最大价值, 那么对于开采型星球f[i]=max(f[i+1],f[i+1]*(1-0.01k)+a[i]),维护型星球类似,然后就可以满分了。

代码

#include <cstdio>#define maxn 200000using namespace std;int a[maxn],n;double f[maxn],b[maxn],k,c,w;double max(double x,double y){    if (x>y) return x;    return y;}int main(){    scanf("%d%lf%lf%lf",&n,&k,&c,&w);    k=1-0.01*k;    c=1+0.01*c;    for (int i=1;i<=n;i++)        scanf("%d%lf",&a[i],&b[i]);    for (int i=n;i>=1;i--)    {        if (a[i]==1) f[i]=max(f[i+1],f[i+1]*(double)k+b[i]);        if (a[i]==0) f[i]=max(f[i+1],f[i+1]*(double)c-b[i]);    }    f[1]*=w*1.0;    printf("%.2lf",f[1]);}
阅读全文
0 0
原创粉丝点击