您的位置:首页 > Web前端

hdu1203 I NEED A OFFER!(01背包)

2016-04-06 21:51 344 查看
这题是求概率,所以dp求的是不被录取的概率,记住以后但凡出来概率题都要反向思考。剩余的钱越少,不被录取的概率越小,录取率越大,所以最后求的就是dp


话说每次做这题脑子里都要翻一个大弯,真是醉了。

注意初始化的时候不能用memset初始化,只能把n逐个初始化,我也不知道为啥。。。反正编译不出来。

还有一点,题中输出的是两数同为0时才跳出,因为这破条件我还WA了4次T T

#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
#include <cmath>

using namespace std;

const int N = 10010;
const int INF = 1e8;

int main()
{
// freopen("in.txt", "r", stdin);
int n, m;
double dp
, b
;
int a
;
while(~scanf("%d%d", &n, &m) && (n != 0) || (m != 0))
{
for(int i = 1; i <= m; i ++)
{
scanf("%d%lf", &a[i], &b[i]);
}
for(int i = 0; i <= n; i ++)
dp[i] = 1;
for(int i = 1; i <= m; i ++)
{
for(int j = n; j >= a[i]; j --)
dp[j] = min(dp[j], dp[j - a[i]] * (1 - b[i])); //不被录取的概率
}
printf("%.1lf%%\n", (1 - dp
) * 100);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdu