HDOJ 2955 Robberies
来源:互联网 发布:淘宝助理5 for mac 编辑:程序博客网 时间:2024/06/06 11:11
一看题目的时候知道是0/1背包,就是不知道怎么入手,因为我们做的0/1背包是整数,如果用被抓率当容量的话要化成整数,根本无法做。也想过用银行金额来做容量,但是没想到用逃脱率当价值。纠结啊!这里涉及一个概率论的问题,如果用被抓率来算是加法,用逃脱率来说是乘法,因为总的被抓率等于每一次被抓率的总和(或的关系|只要有一次被抓就失败了)。逃脱率的话等于每一次逃脱率的乘积(且的关系|保证每次逃脱才算成功)。
懂了这些0/1背包就没有压力了。
代码:
#include<iostream>#include<cmath>using namespace std;int b[105];double r[105],dp[10005];int main(){ int n,t,sum,i,j; double rate,temp; scanf("%d",&t); while( t--){ scanf("%lf%d",&rate,&n); rate=1-rate; //最低逃跑率 sum=0; for( i=1; i<=n; i++){ scanf("%d%lf",&b[i],&temp); r[i]=1-temp; sum+=b[i]; } memset(dp,0,sizeof(dp)); dp[0]=1; //没偷的时候逃脱率为1; for( i=1; i<=n; i++) for( j=sum; j>=b[i]; j--) dp[j]=max(dp[j],dp[j-b[i]]*r[i]); for( i=sum; i>=0; i--) if( dp[i]>=rate){ //大于给定逃脱率的最大收益 printf("%d\n",i); break; } } return 0;}
- HDOJ 2955 Robberies
- hdoj 2955 Robberies
- HDOJ--2955--Robberies
- HDOJ-2955 Robberies
- hdoj 2955Robberies<背包>
- hdoj-【2955 Robberies】
- HDOJ 2955 Robberies (01背包)
- HDOJ 2955 Robberies (01背包)
- hdoj 2955 Robberies 【01背包】
- HDOJ Robberies
- HDOJ 2955Robberies(0 1 背包)
- HDOJ 2955 Robberies (0/1背包)
- hdoj problem 2955 Robberies(01背包问题)
- hdoj 2955 Robberies【01背包】【dp】
- hdoj 2955 Robberies 【0 1背包】
- HDOJ 2955 Robberies 【0 1背包】
- hdoj 2955 Robberies 【dp&&01背包】
- hdoj--2955--Robberies(背包好题)
- 内存对齐的规则以及作用
- tomcat7与tomcat6引入标签taglib的区别:taglib definition not consistent with specification version
- 初识vb数据库开发之实例1(系统登录)
- C可执行文件的存储
- oracle如何对sys用户进行审计(oracle on windows)
- HDOJ 2955 Robberies
- 电脑桌面图标背景出现蓝色解决方法
- Android 应用初始化及窗体事件(按键)的分发
- 关于在view当中增加toolbar的问题
- nginx 源码学习笔记(七)
- 常用C#字符串函数大全
- 不更改数据库默认隔离级别,如何避免丢失更新(lost update)
- 猜扑克的小游戏 复习多线程
- 分享10个超赞的画布Canvas,SVG和CSS3相关的jQuery插件