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--。。来逐个判断,找出最大概率)

  • 相关阅读:
    表单提交
    后台返回来的数据是字符串
    背景图充满屏幕
    微信小程序添加模板消息
    axios
    前端常见的跨域解决方案
    gulp的压缩
    git的使用步骤
    vue项目使用mint UI
    利用HBuilder将vue项目打包成移动端app
  • 原文地址:https://www.cnblogs.com/frankM/p/4399565.html
Copyright © 2011-2022 走看看