zoukankan      html  css  js  c++  java
  • 洛谷P1412 经营与开发题解

    题目链接QWQ这里就不阐述了;

    题解部分:

    从题面上来看,这是个dp(递推)的题目。

    但是dp要满足无后效性,但这个题为了取最值,得考虑从当前开始一直持续到结束的p的影响。

    这让我们怎么满足无后效性??

    当时我一懵

    but,

    如果反过来,那么他不就满足无后效性了吗QWQ。

    也就是无前效性。

    具体来说,如果p对以后的造成影响,那么我们从最后一位开始dp,往前推,那么p只会对已经推完的造成影响,不会对没推的造成影响,这样不就满足无后效性了吗?

    那么只要把题目中讲到的运算反着来写(+变成-),就ok了。

    我们用dp[i]来表示从最后一个n到i的最优解,那么dp转移方程就是:

    if(type[i]==1)

      dp[i]=max(dp[i+1],rqych[i]+dp[i+1]*(1-0.01*k));
    else

      dp[i]=max(dp[i+1],dp[i+1]*(1+0.01*c)-rqych[i]);

    对于每一种type分别进行判断。

    AC代码:

    #include<cstdio>
    #include<iostream>
    using namespace std;
    int read()//自研快读
    {
        int ans=0;
        char ch=getchar(),last=' ';
        while(ch<'0'||ch>'9')last=ch,ch=getchar();
        while(ch>='0'&&ch<='9')ans=(ans<<3)+(ans<<1)+ch-'0',ch=getchar();
        return last=='-'?-ans:ans;
    }
    int n,k,c,w,x,type[100001];
    double dp[100001],rqych[100001];//rqy和ych是两个神仙
    int main(){
        n=read(),k=read(),c=read(),w=read();
        for(int i=1;i<=n;i++)
        {
            type[i]=read();rqych[i]=read();
        }
        for(int i=n;i>=1;i--)//倒着找
        {
            if(type[i]==1)//主要dp方程
                dp[i]=max(dp[i+1],rqych[i]+dp[i+1]*(1-0.01*k));
            else dp[i]=max(dp[i+1],dp[i+1]*(1+0.01*c)-rqych[i]);
        }
        printf("%0.2lf",dp[1]*w);
    } 

    没了。。

    QWQ

  • 相关阅读:
    2. Get the codes from GIT
    1. Install Git and GitExtension
    [Git]Git的常用命令
    测试用例Excel模板For Quality Center
    测试用例excel模板
    如何在win 2008 server和win 7上add web site
    Jmeter运行过程中如何让Fiddler同时可以抓获到服务器的应答报文
    Windows系统文件mshtml.dll
    Jmeter中的XPath Assertion
    AIM Tech Round (Div. 2) B
  • 原文地址:https://www.cnblogs.com/lbssxz/p/11166100.html
Copyright © 2011-2022 走看看