bzoj1492: [NOI2007]货币兑换Cash(待更新)

Posted AKCqhzdy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj1492: [NOI2007]货币兑换Cash(待更新)相关的知识,希望对你有一定的参考价值。

1D1D动态规划问题。网上的大多都说有三类,然而我觉得吧,就是两类,一类利用单调性和斜率优化可以解决的,主要是因为能证明单调性(斜率与二元组的横坐标同时满足单调性,实际上很多时候都不用列二元组,你搞斜率优化的时候看得出来吧)那不单调就只能这样搞了。

暴力。

/*
O(n^2)暴力DP,f表示这天有多少人民币,转移时就转换成券来求 
A表示A券价值,B表示B券价值,S表示这个券的数量 
 
题意得:A*Sa+B*Sb=F,Sa/Sb=R

(A*R+B)*Sb=F;

Sb=F/(A*R+B);  Sa=Sb*R;
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
double a[110000],b[110000],r[110000],f[110000];
int main()
{
    int n;
    memset(f,0,sizeof(f));
    scanf("%d%lf",&n,&f[0]);
    
    for(int i=1;i<=n;i++)
    {
        scanf("%lf%lf%lf",&a[i],&b[i],&r[i]);
        
        f[i]=f[i-1];
        for(int j=i-1;j>=1;j--)
        {
            //劵->钱
            double Sa,Sb;//劵数 
            Sb=f[j]/(a[j]*r[j]+b[j]);
            Sa=Sb*r[j];
            
            f[i]=max(f[i],a[i]*Sa+b[i]*Sb);
        }
    }
    printf("%.3lf\n",f[n]);
    return 0;
}

 

以上是关于bzoj1492: [NOI2007]货币兑换Cash(待更新)的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ1492:[NOI2007]货币兑换——题解

BZOJ1492: [NOI2007]货币兑换Cash

[BZOJ1492][NOI2007]货币兑换Cash(斜率优化+CDQ分治)

BZOJ 1492: [NOI2007]货币兑换Cash( dp + 平衡树 )

bzoj1492[NOI2007]货币兑换Cash cdq分治+斜率优化dp

[BZOJ1492] [NOI2007]货币兑换Cash 斜率优化+cdq/平衡树维护凸包