10 3 4 0.1 4 0.2 5 0.3 0 0
44.0%HintYou should use printf("%%") to print a ‘%‘.
这是一题裸的01背包,概率用1-所有学校都不要他表示。
参考代码:
#include<stdio.h>
#define M 10005
#define min(a,b) a<b?a:b
double dp[M];
int main()
{
	int n,m,x,a[M],min1;
	double b[M],c;
	while(~scanf("%d%d",&n,&m)&&(n+m))
	{
		min1=M;
		for(int i=0;i<=n;i++)
			dp[i]=1.0;
		for(int i=0;i<m;i++)
		{
			scanf("%d%lf",&a[i],&c);
			if(a[i]<min1)
			    min1=a[i];
			b[i]=1-c;
		} 
		for(int i=0;i<m;i++)
		{
		    for(int j=n;j>=a[i];j--)
                dp[j]=min(dp[j],dp[j-a[i]]*b[i]);
		}
		printf("%.1lf%%\n",(1-dp[n])*100);
	}
	return 0;
}
版权声明:本文为博主原创文章,随便转载。
hdu 1203 - I NEED A OFFER!(01背包)解题报告
原文:http://blog.csdn.net/luwhere/article/details/47404631