博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 2955 Robberies
阅读量:2125 次
发布时间:2019-04-30

本文共 968 字,大约阅读时间需要 3 分钟。

题意

Roy去抢银行,每个银行都有一定的财富和被抓的风险,在不超过Roy可承受的风险内最大可以抢多少钱?

AC

  • 01背包
    首先会想到把被抓概率作为背包容量,把财富作为价值,因为概率为小数存在精度问题而且概率之间不是简单相加而是累乘(每个时间独立),这是需要将财富作为背包容量,把概率作为价值,要使被转概率小,则需要逃跑概率尽可能大。
using namespace std;int inf = 0x3f3f3f3f;int main(){#ifndef ONLINE_JUDGE    freopen("in.txt", "r", stdin);#endif    int t;    cin >> t;    while (t--) {        double p0, p[105];        int n, sum = 0, m[105];        double dp[10004];         cin >> p0 >> n;        for (int i = 0; i < n; ++i) {            cin >> m[i] >> p[i];            sum += m[i];        }        // 初始化所有的逃跑概率为零,dp[0] = 1        mem(dp, 0);        dp[0] = 1;        for (int i = 0; i < n; ++i) {            for (int j = sum; j >= m[i]; --j) {                // 计算拿和不拿 最大的逃跑概率                dp[j] = max(dp[j], dp[j - m[i]] * (1 - p[i]));            }        }        for (int i = sum; i >= 0; --i) {            if (1 - dp[i] < p0) {                cout << i << endl;                break;            }        }    }    return 0;}

转载地址:http://pkprf.baihongyu.com/

你可能感兴趣的文章
Leetcode C++《热题 Hot 100-41》75.颜色分类
查看>>
Leetcode C++《热题 Hot 100-42》78.子集
查看>>
Leetcode C++《热题 Hot 100-43》94.二叉树的中序遍历
查看>>
Leetcode C++ 《第175场周赛-1 》5332.检查整数及其两倍数是否存在
查看>>
Leetcode C++ 《第175场周赛-2 》5333.制造字母异位词的最小步骤数
查看>>
Leetcode C++ 《第175场周赛-3》1348. 推文计数
查看>>
Leetcode C++《热题 Hot 100-44》102.二叉树的层次遍历
查看>>
Leetcode C++《热题 Hot 100-45》338.比特位计数
查看>>
读书摘要系列之《kubernetes权威指南·第四版》第一章:kubernetes入门
查看>>
Leetcode C++《热题 Hot 100-46》739.每日温度
查看>>
Leetcode C++《热题 Hot 100-47》236.二叉树的最近公共祖先
查看>>
Leetcode C++《热题 Hot 100-48》406.根据身高重建队列
查看>>
《kubernetes权威指南·第四版》第二章:kubernetes安装配置指南
查看>>
Leetcode C++《热题 Hot 100-49》399.除法求值
查看>>
Leetcode C++《热题 Hot 100-51》152. 乘积最大子序列
查看>>
[Kick Start 2020] Round A 1.Allocation
查看>>
Leetcode C++ 《第181场周赛-1》 5364. 按既定顺序创建目标数组
查看>>
Leetcode C++ 《第181场周赛-2》 1390. 四因数
查看>>
阿里云《云原生》公开课笔记 第一章 云原生启蒙
查看>>
阿里云《云原生》公开课笔记 第二章 容器基本概念
查看>>