您的位置:首页 > 其它

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

2017-10-06 16:22 465 查看

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 200000
using 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]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: