点击打开链接
#include<stdio.h>
double dp(int a[],double b[],int n,int m){
int i,j;
double f[10001]={0.0};//背包的费用是作为下标来记录的
for(i=0;i<m;i++)
for(j=n;j>=a[i];j--)
if(f[j]<1-(1-f[j-a[i]])*(1-b[i]))
f[j]=1-(1-f[j-a[i]])*(1-b[i]);
return f[n]*100;
}
main(){
int a[10001],i,n,m;
double b[10001];
while(scanf("%d%d",&n,&m)==2&&(n+m)){//输入俩数的时候可以这么写
for(i=0;i<m;i++)
scanf("%d%lf",&a[i],&b[i]);
printf("%.1lf%%\n",dp(a,b,n,m));
}
}
/*数组没传入可能是%后写错了,double是%lf*/