解题思路:给出一个临界概率,在不超过这个概率的条件下,小偷最多能够偷到多少钱。因为对于每一个银行都只有偷与不偷两种选择,所以是01背包问题。

这里有一个小的转化,即为f[v]代表包内的钱数为v的时候,小偷不被逮捕的概率,这样我们在用

for(i=1;i<=n;i++)

{

for(v=vol;v>=0;v--)

f[v]=max(f[v],f[v-c[i]]*(1-p[i]));
}

的过程中,在求出最大的不被抓的概率过程中,记录下了在此过程中的包中的钱数与此时对应的概率,这样最后只需用一个循环判断在概率大于临界值的时候跳出循环,就得到了偷到的钱数

包的容量是给出的n个银行一共的钱(即为不管给出的那个临界概率是多少,最多能偷到的钱),每一个物品的消耗是该银行存有的钱。每一个物品的价值是(1-p[i])(即在该银行不被抓的概率)

反思:可耻地看了题解,因为老是转化不过去,概率因为是浮点型的不懂怎么转化,然后包的容量是所给出的所有银行所存的钱的和,也没有想到。

Robberies

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 13067    Accepted Submission(s): 4834

Problem Description
The aspiring Roy the Robber has seen a lot of American movies, and knows that the bad guys usually gets caught in the end, often because they become too greedy. He has decided to work in the lucrative business of bank robbery only for a short while, before retiring to a comfortable job at a university.For a few months now, Roy has been assessing the security of various banks and the amount of cash they hold. He wants to make a calculated risk, and grab as much money as possible.
His mother, Ola, has decided upon a tolerable probability of getting caught. She feels that he is safe enough if the banks he robs together give a probability less than this.
 
Input
The first line of input gives T, the number of cases. For each scenario, the first line of input gives a floating point number P, the probability Roy needs to be below, and an integer N, the number of banks he has plans for. Then follow N lines, where line j gives an integer Mj and a floating point number Pj . Bank j contains Mj millions, and the probability of getting caught from robbing it is Pj .
 
Output
For each test case, output a line with the maximum number of millions he can expect to get while the probability of getting caught is less than the limit set.
Notes and Constraints 0 < T <= 100 0.0 <= P <= 1.0 0 < N <= 100 0 < Mj <= 100 0.0 <= Pj <= 1.0 A bank goes bankrupt if it is robbed, and you may assume that all probabilities are independent as the police have very low funds.
 
Sample Input
3
0.04 3
1 0.02
2 0.03
3 0.05
0.06 3
2 0.03
2 0.03
3 0.05
0.10 3
1 0.03
2 0.02
3 0.05
 
#include<stdio.h>
#include<string.h>
int c[105];
double p[105] ,f[10010];
double max(double a,double b)
{
if(a>b)
return a;
else
return b;
}
int main()
{
int ncase,n,i,v,vol;
double m;
scanf("%d",&ncase);
while(ncase--)
{
vol=0;
scanf("%lf %d",&m,&n);
for(i=1;i<=n;i++)
{
scanf("%d %lf",&c[i],&p[i]);
p[i]=1-p[i];
vol+=c[i];
}
memset(f,0,sizeof(f));
f[0]=1; for(i=1;i<=n;i++)
{
for(v=vol;v>=0;v--)
{
f[v]=max(f[v],f[v-c[i]]*p[i]);
printf("f[%d]=%lf\n",v,f[v]);
}
}
for(i=vol;i>=1;i--)
{
if(f[i]>=1-m)
break;
}
printf("%d\n",i); }
}

  

 

HDU 2955 Robberies【01背包】的更多相关文章

  1. hdu 2955 Robberies (01背包)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955 思路:一开始看急了,以为概率是直接相加的,wa了无数发,这道题目给的是被抓的概率,我们应该先求出总的 ...

  2. hdu 2955 Robberies 0-1背包/概率初始化

    /*Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...

  3. HDU 2955 Robberies(01背包变形)

    Robberies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  4. hdu 2955 Robberies (01背包好题)

    Robberies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  5. HDU——2955 Robberies (0-1背包)

    题意:有N个银行,每抢一个银行,可以获得\(v_i\)的前,但是会有\(p_i\)的概率被抓.现在要把被抓概率控制在\(P\)之下,求最多能抢到多少钱. 分析:0-1背包的变形,把重量变成了概率,因为 ...

  6. HDU 2955 Robberies --01背包变形

    这题有些巧妙,看了别人的题解才知道做的. 因为按常规思路的话,背包容量为浮点数,,不好存储,且不能直接相加,所以换一种思路,将背包容量与价值互换,即令各银行总值为背包容量,逃跑概率(1-P)为价值,即 ...

  7. HDU 2955 Robberies(01背包)

    Robberies Problem Description The aspiring Roy the Robber has seen a lot of American movies, and kno ...

  8. HDOJ 2955 Robberies (01背包)

    10397780 2014-03-26 00:13:51 Accepted 2955 46MS 480K 676 B C++ 泽泽 http://acm.hdu.edu.cn/showproblem. ...

  9. HDU 2955 【01背包/小数/概率DP】

    Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  10. HDOJ.2955 Robberies (01背包+概率问题)

    Robberies 算法学习-–动态规划初探 题意分析 有一个小偷去抢劫银行,给出来银行的个数n,和一个概率p为能够逃跑的临界概率,接下来有n行分别是这个银行所有拥有的钱数mi和抢劫后被抓的概率pi, ...

随机推荐

  1. Robot Framework(二)测试数据语法

    2.1.1文件和目录 测试数据的层次结构安排如下: 测试数据在测试数据文件中创建. 测试数据文件会自动创建一个包含该文件中的测试数据的测试套件. 包含测试数据文件的目录构成了更高级别的测试套件.这样的 ...

  2. APICloud开发小技巧(一)

    apicloud开发文档中,前端开发框架指的就是,类似jq\js的语法: https://docs.apicloud.com/Front-end-Framework/framework-dev-gui ...

  3. jQuery添加新的元素

    append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在被选元素之后插入内容 before() - 在被选元素之前插入内容 $(&quo ...

  4. java 常用API 时间 练习

    package com.orcal.demc01; import java.util.Date; public class Xuexi { public static void main(String ...

  5. 对服务器磁盘、CPU、内存使用状态,设置163邮件告警

    1,桥接模式可上网,首先你的邮箱已经开通yum -y install mailx dos2unix.x86_64  mailx -V[root@localhost ~]# vim /etc/mail. ...

  6. python笔记10-----便捷网络数据NLTK语料库

    1.NLTK的概念 NLTK:Natural language toolkit,是一套基于python的自然语言处理工具. 2.NLTK中集成了语料与模型等的包管理器,通过在python编辑器中执行. ...

  7. JavaScript对原始数据类型的拆装箱操作

    JS中的基本类型: boolean null undefined string number symbol 每当读取一个基本类型的时候,会隐式的自动进行装箱操作(即:将一个基本类型变成对象): var ...

  8. Codeforces Round #447 (Div. 2)E. Ralph and Mushrooms

    Ralph is going to collect mushrooms in the Mushroom Forest. There are m directed paths connecting n  ...

  9. P2024 食物链 (补集)

    题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我 ...

  10. httpClient 几种超时问题

    HttpClient的有3种超时时间,分别是: 1. [java] view plaincopyprint? ConnManagerParams.setTimeout(params, 1000); C ...