• 洛谷 P1412 经营与开发


    /*
    粘一下开始写的暴力吧 虽然没啥价值
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<map>
    #define maxn 100010
    using namespace std;
    int n,type[maxn];
    double k,c,w,v[maxn],ans;
    void Dfs(int p,double t,double m)
    {
        if(p==n+1)
          {
              ans=max(ans,m);
              return;
          }
        if(type[p]==1)Dfs(p+1,t*(1-double(k/100.0)),m+v[p]*t);
        if(type[p]==2)Dfs(p+1,t*(1+double(c/100.0)),m-v[p]*t);
        Dfs(p+1,t,m);
    }
    int main()
    {
        freopen("exploit.in","r",stdin);
        freopen("exploit.out","w",stdout);
        cin>>n>>k>>c>>w;
        for(int i=1;i<=n;i++)
          cin>>type[i]>>v[i];
        Dfs(1,w,0);
        printf("%.2f
    ",ans);
        return 0;
    }
    /*
    似乎不是dp题 因为前面的决策影响后面的决策 具有后效性
    然而他就是dp题 - -
    正难则反 我们发现后面的决策对前面的没有影响 
    但是显然后面的用到前面的决策来确定钻头能力值 
    我们不先计算出前面的 无法确定后面的能力值
    仔细看题目的话 我们会发现前面的对后面的影响只是乘一个数值
    那么我们可以先不乘 反着跑 到了前面在乘 
    对于每一个i 有选或者不选两种情况 
     (1)资源型:如果选了 那么金钱数变大 能力值变小 对后面的影响就是能力值*k 然后+钱 
                  我们假设每个i的能力值为1*w 
                  有 f[i]=max(f[i+1],f[i+1]*k+v[i]*w);
     (2)维修型:如果选了 那么金钱数变小 能力值变大 对后面的影响就是能力值*c 然后-钱 
                  同上假设每个i的能力值为1*w 
                  有 f[i]=max(f[i+1],f[i+1]*c-v[i]*w);
    注意并不是得到的f[1]就是最优解 所以对所有的f取大 
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<map>
    #define maxn 100010
    using namespace std;
    int n,type[maxn];
    double k,c,w,f[maxn],v[maxn],ans;
    int main()
    {
        cin>>n>>k>>c>>w;
        for(int i=1;i<=n;i++)
          cin>>type[i]>>v[i];
        k=(100-k)/100.0;c=(100+c)/100.0;
        for(int i=n;i>=1;i--)
          {
              if(type[i]==1)
              f[i]=max(f[i+1],f[i+1]*k+v[i]*w);
              if(type[i]==2)
              f[i]=max(f[i+1],f[i+1]*c-v[i]*w);
              ans=max(ans,f[i]);
          }
        printf("%.2f
    ",ans);
        return 0;
    }
  • 相关阅读:
    How to solve problems
    【Python】区分List 和String
    【Python】内置方法pop
    【Python】安装配置Anaconda
    【Web crawler】print_all_links
    【Python】多重赋值之值互换
    BNF巴科斯-诺尔范式
    Svn与Git的区别
    python项目部署
    linux每日命令(3):which命令
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5598199.html
Copyright © 2020-2023  润新知