#include<stdio.h>
int a[1010];
double b[1010],f[10010];
double Min(double x,double y)
{
if(x<y)
return x;
else
return y;
}
int main()
{
freopen("1203.txt","r",stdin);
int n,m,i,j;
while(scanf("%d%d",&n,&m),n||m)
{
for(i=0;i<m;i++)
{
scanf("%d%lf",&a[i],&b[i]);
b[i]=1-b[i];
}
for(i=0;i<=n;i++)
f[i]=1;
for(i=0;i<m;i++)
{
for(j=n;j>=a[i];j--)
{
f[j]=Min(f[j],(f[j-a[i]]*b[i]));
}
}
printf("%0.1lf%%\n",(1-f[n])*100);
}
return 0;
}
用min来保存为什么错误
#include<stdio.h>
int a[1010];
double b[1010],f[10010];
double Min(double x,double y)
{
if(x<y)
return x;
else
return y;
}
int main()
{
int n,m,i,j;
while(scanf("%d%d",&n,&m),n||m)
{
double min=1;
for(i=0;i<m;i++)
{
scanf("%d%lf",&a[i],&b[i]);
b[i]=1-b[i];
}
for(i=0;i<=n;i++)
f[i]=1;
for(i=0;i<m;i++)
{
for(j=n;j>=a[i];j--)
{
f[j]=Min(f[j],(f[j-a[i]]*b[i]));
}
}
for(i=1;i<=n;i++)
{
if(min>f[i])
min=f[i];
}
min=1-min;
min=min*100;
printf("%0.1lf%%\n",min);
}
return 0;
}