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

HDU ACM 1203 I NEED A OFFER!->背包问题

时间:2015-04-24 19:14:40      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:c   c++   acm   算法   背包   

分析:最大录取概率=1-最小不录取概率。

0-1背包求出最小不录取概率,然后用1减去即可。

注意dp数组初始化时概率要先设置为1,表示一开始被录取。

#include<iostream>
using namespace std;

double p[10001],dp[10001];
int v[10001];


int main()
{
	int n,m,i,j;

	while(cin>>n>>m &&(n||m))
	{
		for(i=0;i<m;i++)
		{
			cin>>v[i]>>p[i];    //p[i]为录取的概率
			p[i]=1-p[i];        //1-p[i]为不被录取的概率
		}
		for(i=0;i<=n;i++)
			dp[i]=1.0f;       //开始初始化为1.0f,表示被录取

		for(i=0;i<m;i++)
			for(j=n;j>=v[i];j--)
				if(dp[j]>dp[j-v[i]]*p[i])
					dp[j]=dp[j-v[i]]*p[i];

		printf("%.1lf%%\n",(1.0f-dp[n])*100);
	}
	return 0;
}


HDU ACM 1203 I NEED A OFFER!->背包问题

标签:c   c++   acm   算法   背包   

原文地址:http://blog.csdn.net/a809146548/article/details/45248907

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