I NEED A OFFER!
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5280 Accepted Submission(s): 1799
后面的m行,每行都有两个数据ai(整型),bi(实型)分别表示第i个学校的申请费用和可能拿到offer的概率。
输入的最后有两个0。
{
return 1-(1-a)*(1-b);
}
if(t>c[j])
c[j]=t;


2 #include<stdlib.h>
3 #include<math.h>
4 #include<string.h>
5 #include<time.h>
6
7 float c[1001][10001];
8 int w[1001];
9 float p[1001];
10
11 float probability(float a,float b)
12 {
13 return 1-(1-a)*(1-b);
14 }
15
16 int main()
17 {
18 int N,M;
19 while(scanf("%d%d",&N,&M),M|N)
20 {
21 for(int i=0;i<=1000;++i)
22 for(int j=0;j<=10000;++j)
23 c[i][j]=0;
24 for(int i=1;i<=M;++i)
25 scanf("%d %f",&w[i],&p[i]);
26 for(int i=1;i<=M;++i)
27 for(int j=0;j<=N;++j)
28 {
29 if(w[i]<=j)
30 {
31 float t=probability(p[i],c[i-1][j-w[i]]);
32 if(t-c[i-1][j]>1e-6)
33 c[i][j]=t;
34 else
35 c[i][j]=c[i-1][j];
36 }
37 else
38 c[i][j]=c[i-1][j];
39 }
40 printf("%.1f%%\n",c[M][N]*100);
41 }
42 return 0;
43 }


2 #include<stdlib.h>
3 #include<math.h>
4 #include<string.h>
5 #include<time.h>
6
7 float c[10005];
8 int w[1001];
9 float p[1001];
10
11 float probability(float a,float b)
12 {
13 return 1-(1-a)*(1-b);
14 }
15
16 int main()
17 {
18 int N,M;
19 while(scanf("%d%d",&N,&M),M|N)
20 {
21 for(int i=0;i<=10000;++i)
22 c[i]=0;
23 for(int i=1;i<=M;++i)
24 scanf("%d %f",&w[i],&p[i]);
25 for(int i=1;i<=M;++i)
26 for(int j=N;j>=0;--j)
27 {
28 if(w[i]<=j)
29 {
30 float t=probability(p[i],c[j-w[i]]);
31 if(t>c[j])
32 c[j]=t;
33 }
34 }
35 printf("%.1f%%\n",c[N]*100);
36 }
37 return 0;
38 }