zoukankan      html  css  js  c++  java
  • 背包问题 HDOJ2955

    对我这种小菜来说,不得不说这道题隐藏着一个坑,。我还义无反顾地跳进去了。。

    很明显的背包问题,但是如果把银行的存款当做价值,把总的被抓概率当做容量的话,那么,。数据的精度是一大问题:注意题上并没有说精度是小数点后两位!。次之:题目的意思不是概率相加,。不是概率相加。。。

     

    正确的做法是把被抓的概率换成逃跑概率,把逃跑概率做为价值,。这样,一个double [10002]的数组就可以解决问题(100*100,最多拿到10000大洋),再令 mj[100]存放银行的钱数,pj[100] 存逃跑概率

     

    //状态转移方程:
    for(i=0;i<n;i++)
        for ( j=sum;j>=mj[i] ;   j-- )                           ////======
        {
            if(dp[j-mj[i]]*pj[i]>dp[j])          //
     
                dp[j]=dp[j-mj[i]]*pj[i];            //倒推。
              
              
              
     
        }


     

    若求拿到10000 块大洋的最大逃跑概率,可转化为拿到10000-mj[0]块大洋大最大逃跑概率,再转化为拿到10000-mj[0]-mj[1]块大洋的最大逃跑概率.............................直到 拿到mj[n]块大洋的最大逃跑概率(不一定是pj[n]  !正因为这样,才会有j--。。来逐个判断,找出最大概率)

  • 相关阅读:
    ROW_NUMBER() OVER (PARTITION BY yy ORDER BY zz) in Linq
    Oracle-sql分页方法
    Lambda
    ISNULL做简单的显示字段逻辑
    Select2使用方法汇总
    mysqldump 定时备份数据(全量)
    ubuntu16.10下安装erlang和RabbitMQ
    XShell连接本地Ubuntu虚拟机
    Haroopad 安装到 Mac OSX
    Swagger 生成API文档
  • 原文地址:https://www.cnblogs.com/frankM/p/4399565.html
Copyright © 2011-2022 走看看