BZOJ 4318: OSU!
题目大意:
一个序列,每个位置有p的概率是1,否则是0。
序列中一段连续1的个数为x,则贡献为x^3,且这连续的一段1不能被其余的一段1所包含。
题解:
考虑每一位是1对答案的贡献。
x^3--->(x+1)^3
发现贡献和x^2的期望和x的期望有关。dp求出。
这一位如果是0,则没有贡献。
这题应该可以扩展到x^k,复杂度为O(n*k^2)
并没有验证过是否可以dp 组合数,再通过组合数求x^k。
代码:
#include<cstdio> using namespace std; double a[100005],f[100005][3]; int main(){ int n; scanf("%d",&n); for (int i=1; i<=n; i++) scanf("%lf",&a[i]); double ans=0; for (int i=1; i<=n; i++){ f[i][1]=(f[i-1][1]+1)*a[i]; f[i][2]=(f[i-1][2]+2*f[i-1][1]+1)*a[i]; ans+=(3*f[i-1][2]+3*f[i-1][1]+1)*a[i]; } printf("%.1f\n",ans); return 0; }