动态规划-01背包问题
#include<stdio.h>
#include<string.h>
double max(double x,double y);
int main()
{
int d,n,m,i,j,c[11111];
double w[11111],f[11111];
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<=n;i++)
f[i]=1;
if(n==0&&m==0)//题目要求,都不为0
break;
for(i=0;i<m;i++)
{
scanf("%d%lf",&c[i],&w[i]);//输入花费,和收到offer的概率。
}
d=n;//如果会用指针的话,应该会方便很多。
for(i=0;i<m;i++) //OI背包公式。
{
for(j=d;j>=0;j--)//价格要求
{
if(j-c[i]<0)
break;
f[j]=max(f[j],f[j-c[i]]*(1-w[i]));//所有的值已经初始化为1,状态转移
}
}
printf("%.1lf%%\n",(1-f[d])*100);
}
}
double max(double x,double y)
{
if(x>y)
return y;
else
return x;
}