简单题目!
明天上学,是否再AC一道背包之后再睡觉呢?
/*
* hdu-1203 i need a offer
* mike-w
* 2011-10-10
* ----------------------
* 0-1背包
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#define MAXN 10010
#define MAXM 1010
float opt[MAXN];
long fee[MAXM];
float p[MAXM]; /* 被拒的概率 */
long M,N;
int main(void)
{
#ifndef ONLINE_JUDGE
assert(freopen("1203.in","r",stdin));
#endif
long i,j;
while(scanf("%ld%ld",&N,&M),M||N)
{
for(i=0;i<M;i++)
scanf("%ld%f",fee+i,p+i),p[i]=1.0-p[i];
for(i=0;i<=N;i++)
opt[i]=1.0;
for(i=0;i<M;i++)
for(j=N;j>=fee[i];j--)
if(opt[j]>opt[j-fee[i]]*p[i])
opt[j]=opt[j-fee[i]]*p[i];
printf("%.1f%%\n",(1.0-opt[N])*100.0);
}
return 0;
}