#include<iostream>
#include<set>
#include<string>
#include<algorithm>
#include<iomanip>
using namespace std;
int const MAX = 10005;
int main()
{
int n;
cin >> n;
double v;
int m,s=0;
int w[MAX];
double p[MAX];
double last[MAX];
for (int i = 0; i < n; i++)
{
cin >> v >> m;
s = 0; //初始化总是写在了外面!!
for (int j = 0; j < m; j++)
{
cin >> w[j] >> p[j];
s = s + w[j];
}
memset(last, 0, sizeof(last));
int vv;
last[0] = 1;
for (int j = 0; j < m; j++)
{
for (vv =s; vv >= w[j]; vv--)
{
last[vv] = max(last[vv], last[vv - w[j]]*(1-p[j]));
}
}
for (int j = s; j >=0; j--)
{
if (last[j] > 1 - v)
{
cout << j << endl;
break;
}
}
}
system("pause");
return 0;
}
没有把题意审清楚
先用概率当作背包容量
然后发现得用偷的钱当作背包容量
概率不是简单的相加,而是相乘
他的例子迷惑性很强。。