码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1203 I NEED A OFFER! 01背包题解

时间:2014-08-28 16:59:50      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:os   使用   io   for   amp   sp   on   c   ios   

本题题目居然写错了也没改正,囧,应该是AN OFFER!


题解就是dp加上概率论求解。

因为需要求最少有一间学校录取的概率,那么就可以使用逆向思维,求没有一间学校录取的概率。基本的概率论思维,不过如果久了没做概率论还是会有点麻烦的。

然后就是标准的01背包求解了:

#include <stdio.h>
#include <vector>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <string>
#include <limits.h>
#include <stack>
#include <queue>
#include <set>
#include <map>
using namespace std;

const int MAX_N = 10001;

struct Offer
{
	int val;
	double p;
};

Offer offs[MAX_N];
double dp[MAX_N];
int N, M;

int main()
{
	while (~scanf("%d %d", &N, &M) && (N || M))
	{
		for (int i = 0; i < M; i++)
		{
			scanf("%d %lf", &offs[i].val, &offs[i].p);
		}
		for (int i = 0; i <= N; i++)
		{
			dp[i] = 1.0;
		}
		for (int i = 0; i < M; i++)
		{
			for (int j = N; j >= offs[i].val; j--)
			{
				if (dp[j]>dp[j-offs[i].val]*(1.0-offs[i].p))
					dp[j] = dp[j-offs[i].val]*(1.0-offs[i].p);
			}
		}
		printf("%.1lf%%\n", (1.0-dp[N])*100.0);
	}
	return 0;
}



HDU 1203 I NEED A OFFER! 01背包题解

标签:os   使用   io   for   amp   sp   on   c   ios   

原文地址:http://blog.csdn.net/kenden23/article/details/38899699

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!