训练3 习题22

原创 2016年05月30日 22:33:46

题目:
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 . <br>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.<br><br>Notes and Constraints<br> 0 < T <= 100<br> 0.0 <= P <= 1.0<br> 0 < N <= 100<br> 0 < Mj <= 100<br> 0.0 <= Pj <= 1.0<br> 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
 

Sample Output
2 4 6



思路:   01 背包问题     dp[i]表示偷价值为 i 时不被抓的概率  表达式为dp[j] = max(dp[j] , dp[j-m[i]] * (1-p[i]));求出不被逮捕的所能强盗的最大钱数。


#include <stdio.h>
#include <string.h>


int m[101];
double p[101],dp[10001];


int main()
{
    int t,n,i,j,sum;
    double P;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lf %d",&P,&n);
        sum = 0;
        P = 1 - P;
        for(i = 0; i < n; i++)
        {
            scanf("%d %lf",&m[i],&p[i]);
            sum += m[i];
            p[i] = 1 - p[i];
        }
        memset(dp,0,sizeof(dp));
        dp[0] = 1;
        for(i = 0; i < n; i++)
            for(j = sum; j >= m[i]; j--)
                if(dp[j] < dp[j-m[i]]*p[i])
                    dp[j] = dp[j-m[i]]*p[i];
        for(i = sum; i >= 0&&dp[i] < P; i--);
        printf("%d\n",i);
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

训练3 习题7

题目: Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都...

训练3 习题11

思路: Problem Description 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。其中,蜂房的结构如下所示。   ...

训练3 习题6

题目:Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数...

Visual C++基础实践训练2(22)

  • 2009-03-11 12:52
  • 1.95MB
  • 下载

习题22 到现在你学到了哪些东西

回首前21课的知识总结

笨方法学Python 习题 22: 到现在你学到了哪些东西?

这节以及下一节的习题中不会有任何代码,所以也不会有习题答案或者加分习题。其实这节习题可以说是一个巨型的加分习题。我将让你完成一个表格,让你回顾你到现在学到的所有东西。 首先,回到你的每一个习题的脚本里...

swift UI专项训练22 设置网址和载入指示器

上一话中我们对网络浏览器的UI做了初步的设置,那么这一话中,我们来设置网址和载入指示器。网址框先设置一个占位符。我们之前讲过了。 当我们的网址输错的时候可以修改,设置clear Button...

PAT甲级真题及训练集(22)--1090. Highest Price in Supply Chain (25)

1090. Highest Price in Supply Chain (25) 时间限制 200 ms 内存限制 65536 kB 代码...

华为机试在线训练-牛客网(22)字符串加密

题目描述 有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙。下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第1个,其余...

acm训练 2017 02 22

训练一: 零起点学算法72——首字母变大写 Description 输入一个英文句子,将每个单词的第一个字母改成大写字母。 Input 输入数据包含多个测试实例,每个测试实例是一个长度不超过1...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)