hdu 2955 Robberies(0/1背包)

简介: 点击打开链接hdu 2955 思路: 0/1背包 分析: 1 按照题目的意思我们很容易知道这就是一个0/1背包问题,如果我们把概率当作是背包的容量,那么我们遇到一个问题就是浮点数的dp,因为题目没有告诉我们小数点具体几位,那么我们就不能够通...

点击打开链接hdu 2955

思路: 0/1背包
分析:
1 按照题目的意思我们很容易知道这就是一个0/1背包问题,如果我们把概率当作是背包的容量,那么我们遇到一个问题就是浮点数的dp,因为题目没有告诉我们小数点具体几位,那么我们就不能够通过乘上10^n来转化为整数,所以我们应该考虑换种思想
2 按照正常的思路是dp[i][j]表示前i个物品放入概率为j的最大价值,那么我们这边把价值当成背包来看的话我们设dp[i][j]表示前i个物品放入金钱为j的最小被抓概率(因为题目不好求最小概率我们可以认为是最大的不被抓概率)
3 最后去从大到小枚举找到一个被抓的概率小于p即可

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int N = 110;
const int MAXN = 10010;

double p;
int n , sum , v[N] , minV;
double dp[MAXN] , w[N];

int solve(){
    memset(dp , 0 , sizeof(dp));
    dp[0] = 1;//  注意当什么钱都没有抢的时候不被抓的概率为1
    for(int i = 1 ; i <= n ; i++)
        for(int j = sum ; j >= v[i] ; j--)
            dp[j] = max(dp[j] , dp[j-v[i]]*(1.0-w[i]));// 这里求不被抓就是每一次都不被抓即相乘
    for(int j = sum ; j >= minV ; j--)
        if(1.0-dp[j] <= p)
            return j;
    return 0;
}

int main(){
    int Case;
    scanf("%d" , &Case);
    while(Case--){
         scanf("%lf%d" , &p , &n); 
         sum = 0;
         minV = 1<<30;
         for(int i = 1 ; i <= n ; i++){
             scanf("%d%lf" , &v[i] , &w[i]);
             sum += v[i];
             minV = min(minV , v[i]);
         }
         printf("%d\n" , solve());
    }
    return 0;
}



目录
相关文章
|
11月前
ACwing :01背包问题
ACwing :01背包问题
|
12月前
|
存储
【AcWing】AcWing 2. 01背包问题
目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
52 0
|
Java
HDU 2546 饭卡(01背包裸题)
饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 28562    Accepted Submission(s): 9876 Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。
1072 0
|
人工智能 Windows
hdu 1963 Investment(完全背包)
点击打开链接hdu 1963 思路: 完全背包 分析: 1 根据题目很容易分析出题目是裸的完全背包,但是经过题目的条件我们发现dp数组开不下(怒RE不解释) 2 然后发现题目说了所有的bonds的value都是1000的整数倍,因此这边我...
840 0
poj Dollar Dayz(完全背包)
点击打开链接poj 3181 思路: 完全背包+高精度 分析: 1 题目是裸的完全背包,但是要注意的一个地方是要用高精度 代码: #include #include #include #include using namespa...
951 0