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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值