#include<stdio.h> #include<string.h> double max(double x,double y); int main() { int d,v,n,i,c[11111]; double w[11111],f[11111]; while(scanf("%d%d",&v,&n)!=EOF) { for(i=0;i<=v;i++) f[i]=1; if(v==0&&n==0)//题目要求 break; for(i=0;i<n;i++) { scanf("%d%lf",&c[i],&w[i]);//输入花费,和收到offer的概率。 } d=v;//如果会用指针的话,应该会方便很多。 for(i=0;i<n;i++) //OI背包公式。 { for(v=d;v>=0;v--) { if(v-c[i]<0) break; f[v]=max(f[v],f[v-c[i]]*(1-w[i]));//所有的值已经初始化为零 } } printf("%.1lf%% ",(1-f[d])*100); } } double max(double x,double y) { if(x>y) return y; else return x; }
反映出来的问题主要有
1:设置变量的时候没有从开始就严格按照题目设置,导致输入输出不配套出错。2:输出的时候格式出错,太蠢