标签:
解题思路:题目要求的是至少收到一份Offer的最大概率,我们得到得不到的最小概率即可,状态转移方程: dp[j] = min(dp[j], dp[j - val[i]] * p[i]); 其中,p[i]表示得不到的概率, (1 - dp[j]) 为花费j元得到Offer的最大概率
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int n, m;
while (scanf("%d%d", &n, &m) && n + m) {
double DP[10010];
for (int i = 0; i <= n; i++)
DP[i] = 1.0;
while (m--) {
int A;
double B;
scanf("%d%lf", &A, &B);
B = 1 - B;
for (int i = n; i >= A; i--)
DP[i] = min(DP[i], DP[i-A]*B);
}
printf("%.1lf%%\n", (1 - DP[n]) * 100);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/kl28978113/article/details/47835643