robberies专题

HDU 2955 Robberies (转化概率-01背包)

【题目链接】:click here~~ 代码: /** Problem: HDU No.2955* Running time: 46MS* Complier: G++* Author: ACM_herongwei* Create Time: 15:01 2015/9/9 星期三* zeroonebags* 用成功逃走的概率当做价值!银行的总钱数当做背包容量!单个银行的钱数体积

HDU-2955 Robberies 01背包 + 概率

题目链接 刚开始以为概率就2位小数 乘100来做WA 看了讨论区恍然大悟。 用成功逃走的概率当做价值!银行的总钱数当做背包容量! #include <stdio.h>#include <string.h>#include <iostream>#include<functional>#include <queue>#include <string>#include

HUD 2955 Robberies [0-1背包的简单转化]

/*Hud 2955 Robberies简单的0-1背包转换.由此题,抽象的事物也可以相当形象的解释.形象的解释,看以下注释.*/#include<stdio.h>#include<string.h>#define max(a,b) a>b?a:bmain(){int T;scanf("%d",&T);while(T--){int i,n,v[105],V=0;double p,w[1

hdu 2955 dp(0,1背包) Robberies

这个,刚开始,想的是所有人的想法,把概率乘到整数,然后0,1背包。 但是,想着要乘几位,于是看了下别人的。。。 没想到,是反过来,把抢的钱看成背包,把逃跑率看成价值。 dp[i][j]表示抢第i家银行要抢j的钱能逃跑的最大概率。 当money[i]<=j时,dp[i][j]=max(dp[i-1][j],dp[i-1][j-money[i]]*p[i]); 这里因为是概率问题,所以是相乘

01背包dp变形--Robberies

题意:一个强盗要抢劫银行又不想被抓到,所以要进行概率分析求他在不被抓的情况下能抢最多的钱。他给定T(样例个数),N(要抢的银行的个数),P(被抓的概率要小于P)Mj(强盗能抢第j个银行Mj元钱),Pj(强盗抢第j个银行被抓的概率为Pj)。 思路:被抓的概率不好直接求出来,但可以直接求出不被抓的概率,则有状态转移方程dp[j] = max(dp[j], dp[j-b[i].money]*

HDU 2955 Robberies(概率DP)

思路:直接令dp[i][j]表示抢前i个银行,抢了j块钱不被抓的概率是多少,然后就和01背包一样转移就可以了 #include<bits/stdc++.h>using namespace std;double dp[10000+5];double p[105];int w[105];int main(){int T;scanf("%d",&T);while(T--){mem