zoukankan      html  css  js  c++  java
  • 第六周 N题

    Description

    As Harry Potter series is over, Harry has no job. Since he wants to make quick money, (he wants everything quick!) so he decided to rob banks. He wants to make a calculated risk, and grab as much money as possible. But his friends - Hermione and Ron have decided upon a tolerable probabilityP of getting caught. They feel that he is safe enough if the banks he robs together give a probability less than P.

    Input

    Input starts with an integer T (≤ 100), denoting the number of test cases.

    Each case contains a real number P, the probability Harry needs to be below, and an integer N (0 < N ≤ 100), the number of banks he has plans for. Then follow N lines, where line j gives an integer Mj (0 < Mj ≤ 100) and a real number Pj . Bank j contains Mj millions, and the probability of getting caught from robbing it is Pj. A bank goes bankrupt if it is robbed, and you may assume that all probabilities are independent as the police have very low funds.

    Output

    For each case, print the case number and the maximum number of millions he can expect to get while the probability of getting caught is less than P.

    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

    Case 1: 2

    Case 2: 4

    Case 3: 6

     
    题意:一个人去抢银行,输入它被抓的概率(P)和银行的个数(N),接下来输入每个银行的钱和被抓的概率....
    求这个人可以不被抓最多可以抢钱抢到多少....
     
     
    解题思路:  
           既然是求他不被抓又抢到的钱最多,那么就是求他不被抓的概率中抢到的钱最多的...
          那d[j]表示他不被抓的概率,j表示抢到的钱
            d[j]=max(d[j],d[j-N[i]]*(1-P[i]))
          这里的N[i]表示银行里的钱,P[i]表示被抓概率.
          
          求出他抢到的钱不被抓的概率后,只要循环找到满足dp[j]>=1-p的j就好了(这里倒过来循环方便寻找)
     
     
     
    代码如下:
     
     
     1 #include <stdio.h>
     2 #include <string.h>
     3 int N[105];
     4 double P[105],d[10005];
     5 double max(double a,double b)
     6 {
     7     return a>b?a:b;
     8 }
     9 int main()
    10 {
    11     int T,c=0;
    12     scanf("%d%",&T);
    13     while(T--)
    14     {
    15         c++;
    16         int n,total=0;
    17         double p;
    18         memset(d,0,sizeof(d));
    19         d[0]=1;
    20         scanf("%lf%d",&p,&n);
    21         for(int i=0; i<n; i++)
    22         {
    23             scanf("%d%lf",&N[i],&P[i]);
    24             total+=N[i];
    25         }
    26 
    27         for(int i=0;i<n;i++)
    28         {
    29             for(int j=total;j>=N[i];j--)
    30             {
    31                 d[j]=max(d[j],d[j-N[i]]*(1-P[i]));
    32                 //printf("%d  %lf
    ",j,d[j]);
    33             }
    34         }
    35         for(int i=total;i>=0;i--)
    36         {
    37            // printf("%lf  %d
    ",d[i],i);
    38             if(d[i]>=1-p)
    39             {
    40                 printf("Case %d: %d
    ",c,i);
    41                 break;
    42             }
    43         }
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    Ubuntu下UFW防火墙简单设置
    ubuntu设置tomcat开机自动启动
    ubuntu16.04编辑器vi的使用
    Several ports (8005, 8080, 8009) required
    JavaScript检测浏览器(Firefox、IE)是否安装指定插件
    mongo 初级使用
    @Scheduled(cron = "0 0 * * * ?")实现定时任务
    Calendar时间类型数据设置
    Maven+STS工程中Maven Dependencies 文件夹丢失问题
    redis安装以及远程连接
  • 原文地址:https://www.cnblogs.com/huangguodong/p/4744231.html
Copyright © 2011-2022 走看看