您的位置:首页 > Web前端

hdu 1203 I NEED A OFFER! (01背包)

2013-02-26 20:50 399 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1203

思路:01背包。状态转移方程:f[j]=min(f[j],f[j-cost[i]]*(1-p[i]))

#include <cstdio>
#include <cstring>
#define min(x,y) ((x)<(y)?(x):(y))

const int NUM=10010;
int n,m;
int cost[NUM];
double p[NUM],f[NUM];

double ZeroOnePack ()
{
	int i,j;
	for (i=0;i<=n;i++)
		f[i]=1;
	for (i=1;i<=m;i++)
		for (j=n;j>=cost[i];j--)
			f[j]=min(f[j],f[j-cost[i]]*(1-p[i]));
	return 1-f
;
}

int main ()
{
	while (scanf("%d%d",&n,&m) , n || m)
	{
		for (int i=1;i<=m;i++)
			scanf("%d%lf",&cost[i],&p[i]);
		printf("%.1lf%%\n",100*ZeroOnePack ());
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: