- 最有活力的鲜花
- 2015-02-16 09:32:18 @
为什么错了,是精度问题吗?
我的做法:
期望=每种方法的最大值的总和/方法数
设最大值为i的方法数为f[i],则f[i]=i^n-(i-1)^n
所以方法数为m^n,总和为sigma(f[i]*i),把每项拆开求和。
Code:
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
const int N=100001;
int n,m;
double down,t[N],res;
double mi(double i,int k)
{
if (!k) return 1;
double ans=mi(i,k>>1);
return ans*ans*(k&1?i:1);
}
int main(void)
{
scanf("%d%d",&m,&n);
for (int i=1;i<=m;i++) t[i]=mi((double)i,n);
down=t[m];
for (int i=m;i;i--) res+=(t[i]-t[i-1])*(double)i/down;
printf("%0.4lf\n",res);
return 0;
}
4 条评论
-
JZdavid LV 8 @ 2015-02-16 11:22:40
f[i]=(i/n)^n-((i-1)/n)^n
ans=sigma(f[i]) -
2015-02-16 09:46:45@
谢谢!
-
2015-02-16 09:45:04@
貌似是的...
-
2015-02-16 09:39:33@
您是否测试过极限数据?……没有类型能存下100000^100000
- 1