#include
#define maxn 109
using namespace std;
int n,a[maxn];
double dp[maxn][maxn];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
dp[0][0]=1;
for(int i=1;i<=n;i++){
dp[i][0]=dp[i-1][0]*(100.0-a[i])/100;
for(int j=1;j<=i;j++)
dp[i][j]=dp[i-1][j]*(100.0-a[i])/100+dp[i-1][j-1]*1.0*a[i]/100;
}
int low=(3*n+4)/5;
double ans=0;
for(int i=low;i<=n;i++)
ans+=dp[n][i];
printf("%.5f\n",ans);
//system("pause");
return 0;
}
字面理解,dp就是dynamic programming,动态规划。
今天又看了一下,发现它跟将一个整数字符串转换为整数的思路是一样的,就是说每次都先乘以进制数,然后再加上当前位的数字,直到到了最后一位。