HDU 2955 Robberies
2015-03-12 23:18
190 查看
题目链接
题意:T~100组数据,n~100个银行,每个银行都有一个钱数m~100,和抢这家银行钱被抓的概率,有一个limit概率,每个银行之间是独立的,求在不超过limit可以抢的最大钱数。
题解:用钱数作为数组维数,dp【i】表示偷i元被抓的概率,扫过去,中间是小细节处理。
重点:在概率下的收益最大化,01背包的感觉,用利益最为数组维数。
题意:T~100组数据,n~100个银行,每个银行都有一个钱数m~100,和抢这家银行钱被抓的概率,有一个limit概率,每个银行之间是独立的,求在不超过limit可以抢的最大钱数。
题解:用钱数作为数组维数,dp【i】表示偷i元被抓的概率,扫过去,中间是小细节处理。
重点:在概率下的收益最大化,01背包的感觉,用利益最为数组维数。
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <cmath> #include <ctype.h> #include <limits.h> #include <cstdlib> #include <algorithm> #include <vector> #include <queue> #include <map> #include <stack> #include <set> #include <bitset> #define CLR(a) memset(a, 0, sizeof(a)) #define REP(i, a, b) for(int i = a;i < b;i++) #define REP_D(i, a, b) for(int i = a;i <= b;i++) typedef long long ll; using namespace std; const int maxn = 1e2 + 10; const int key = 1e4; double dp[maxn*maxn]; int n, ncase, money[maxn]; double jilv[maxn], limit; void getDp() { dp[0] = 0;//初始化,概率为0,和1——不可能。 for(int i = 1;i <= key;i++) { dp[i] = 1; } REP_D(i, 1, n) { for(int j = key;j >= money[i];j--) { if(dp[j - money[i]] != 1) { double p = dp[j - money[i]], q = jilv[i]; double tmp = 1 - (1 - p)*(1 - q); dp[j] = min(dp[j], tmp); } } } } void solve() { getDp(); int ans = 0; for(int i = 0;i <= key;i++) { if(dp[i] + 1e-12 < limit) { ans = i; } } printf("%d\n", ans); } int main() { // freopen("1Ain.txt", "r", stdin); //freopen("1Aout.txt", "w", stdout); scanf("%d", &ncase); while(ncase--) { scanf("%lf", &limit); scanf("%d", &n); REP_D(i, 1, n) { scanf("%d%lf", &money[i], &jilv[i]); } solve(); } return 0; }
相关文章推荐
- hdu 2955 Robberies 01背包
- HDU2955_Robberies【01背包】
- hdu 2955 Robberies
- hdu 2955 Robberies + LightOJ 1079 Just another Robbery (01背包 概率)
- hdu 2955 Robberies(背包问题)
- HDU 2955 Robberies(01背包)(动态规划)
- HDU 2955 Robberies(01 背包)
- hdu 2955 Robberies 0-1背包/概率初始化
- HDU 2955 Robberies(01背包)
- hdu 2955 Robberies
- HDU 2955 Robberies
- HDU 2955 Robberies (01背包,思路要转换一下,推荐!)
- LightOJ 1079 Just another Robbery &&HDU 2955 Robberies 01背包
- HDU 2955 Robberies(0-1 DP)
- hdu 2955 Robberies
- HDU 2955 Robberies (0-1背包)
- HDU 2955 —— Robberies 01背包
- hdu 2955 Robberies 背包
- hdu 2955 Robberies(01背包变形)
- hdu 2955 Robberies(概率,dp)