//背包 //求拿到offer的概率,先算一份也拿不到的概率 //DP[j] = min(DP[j],DP[j-ai[i]] + bi[i]) //求出拿不到offer的最小概率,再拿一减 //memset很有问题,前一部分被置为1,后一部分是随机值 #include <iostream> #include <cstdio> #include <cstring> using namespace std; #define MAX 10001 int n,m; int ai[MAX + 1]; double bi[MAX + 1]; double DP[MAX + 1]; double c; int main() { while(scanf("%d%d",&n,&m) != EOF) { if(n == 0 && m == 0) break; for(int i = 1; i <= m; i++) { cin>>ai[i]>>bi[i]; } //memset(DP,1,sizeof(DP)); for(int i = 0; i < MAX; i++) { DP[i] = 1; } c = 1; for(int i = 1; i <= m; i++ ) { for(int j = n; j >= ai[i]; j--) { DP[j] = min(DP[j],DP[j-ai[i]] * (1 - bi[i])); c = min(c,DP[j]); } } double x = (1-c) * 100; printf("%.1f%%\n",x); } return 0; }