题意:
就是有n种邮票,小A去买,每次随机得到其中一张,第k次购买需要k元钱,问你小A获得n种邮票花的钱的期望。
思考:
一看就是经典随机数的题目,但是这个莫名带上了第k次买k元钱,不过还是直接求购买次数的期望就可以了呀。然后求出来求平方发现不对。因为求的是花的钱的期望,而不是把期望求出来再平方。
所以还要定义另一个dp2,是平方的期望。推一推式子:
还有要注意的就是E(xi) = E(xi+1)如果是增加一次操作次数,都是在E里面加的,因为xi的定义就是已经有了i个的"操作次数",既然操作次数加1了,那么就是这个x要加1。如果是用了下一个状态,也就是E(xi+1)那么就是在下标加1。对x的定义要明确好。
代码:
#include
#define fi first
#define se second
#define pb push_back
#define db double
#define int long long
#define PII pair<int,int >
#define mem(a,b) memset(a,b,sizeof(a))
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;
const int mod = 1e9+7,inf = 1e18;
const int N = 2e5+10,M = 2010;
int T,n,m,k;
int va[N];
db dp1[N];
db dp2[N];
signed main()
{
IOS;
cin>>n;
db ans = 0,sum = 0;
for(int i=n-1;i>=0;i--)
{
dp1[i] = dp1[i+1]+(db)n/(n-i);
dp2[i] = dp2[i+1]+(db)i/(n-i)*2*dp1[i]+2*dp1[i+1]+(db)n/(n-i);
}
printf("%.2lf",(dp1[0]+dp2[0])/2);
return 0;
}
总结:
确定好思考的公式。