训练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;
}

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

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

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

训练3 习题3

题目: Input Input contains multiple test cases. Each test case is described in a line as follo...
  • xiaobai11as
  • xiaobai11as
  • 2016年05月31日 22:28
  • 164

训练3 习题13

题目:Problem Description 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?   ...
  • xiaobai11as
  • xiaobai11as
  • 2016年05月20日 21:22
  • 129

训练3 习题18

题目: Problem Description Before ACM can do anything, a budget must be prepared and the necess...
  • xiaobai11as
  • xiaobai11as
  • 2016年05月30日 08:56
  • 144

训练3 习题16

题目: Problem Description 在一无限大的二维平面中,我们做如下假设:1、  每次只能移动一格;2、  不能向后走(假设你的目的地是“...
  • xiaobai11as
  • xiaobai11as
  • 2016年05月23日 17:14
  • 166

训练3 习题11

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

训练3 习题10

题目:Problem Description 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?   Input 输入数据首先包含...
  • xiaobai11as
  • xiaobai11as
  • 2016年05月14日 21:13
  • 196

训练3 习题6

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

训练3 习题14

题目: Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最...
  • xiaobai11as
  • xiaobai11as
  • 2016年05月23日 15:09
  • 127

训练3 习题24

题目: Problem Description Recently, iSea went to an ancient country. For such a long time,...
  • xiaobai11as
  • xiaobai11as
  • 2016年05月31日 12:54
  • 160
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:训练3 习题22
举报原因:
原因补充:

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