概述
题目链接
点此跳转
思路
变量含义:
f[i]
为,抢到的钱数为i
时不被抓到的概率。v[i]
为第i
次抢劫时不被抓到的概率。
转移方程:
f [ j ] = m a x ( f [ j ] , f [ j − w [ i ] ] ∗ v [ i ] ) large f[j] = max(f[j], f[j - w[i]] * v[i]) f[j]=max(f[j], f[j−w[i]]∗v[i])
初始化:
f[0] = 1
,表示抢到的总钱数为 0 时不被抓到的概率,即什么都不做,不被抓到的概率。因为什么都没有做,所以一定不会被抓,那么初始化为 1。
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 10010;
int n;
int w[N];
double v[N];
double f[N];
void solve() {
double p;
int sum = 0;
cin >> p >> n;
p = 1 - p;
for (int i = 1; i <= n; i ++ ) {
cin >> w[i] >> v[i];
v[i] = 1 - v[i];
sum += w[i];
}
memset(f, 0, sizeof f);
f[0] = 1;
for (int i = 1; i <= n; i ++ )
for (int j = sum; j >= w[i]; j -- )
f[j] = max(f[j], f[j - w[i]] * v[i]);
for (int i = sum; i >= 0; i -- ) {
if (f[i] >= p) {
cout << i << endl;
return;
}
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int tt;
cin >> tt;
while (tt -- ) {
solve();
}
return 0;
}
最后
以上就是清秀裙子为你收集整理的HDU - 2955 - Robberies的全部内容,希望文章能够帮你解决HDU - 2955 - Robberies所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复