最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

【题解】收集邮票

IT圈 admin 3浏览 0评论

【题解】收集邮票

#include<bits/stdc++.h>
using namespace std;
//设g[i]表示购买了i张邮票,买完剩下邮票需要的期望钱数.
//设f[i]表示拿到了i张邮票,要取完剩下邮票需要的期望次数.
//∴有n-i/n的几率拿到没有拿过的邮票,有i/n的几率拿到拿过的邮票.
//那么有:f[i]=((n-i)/n)*f[i+1]+(i/n)*f[i]+1.
//      ((n-i)/n)*f[i]=((n-i)/n)*f[i+1]+1.
//      f[i]=f[i+1]+((n-i)/n).
//又有:g[i]=(i/n)*(g[i]+f[i])+((n-i)/n)*(g[i+1]+f[i+1])+1.
//  即:g[i]=(i/(n-i))*(f[i]+1)+g[i+1]+f[i+1]+1.
long long n;
double f[10001],g[10001];
int main(){scanf("%lld",&n);for(long long i=n-1;i>=0;i--){f[i]=f[i+1]+(double)(1.0*n/(n-i));g[i]=(double)(1.0*i/(n-i))*(f[i]+1)+g[i+1]+f[i+1]+1;}printf("%.2lf",g[0]);
}

【题解】收集邮票

#include<bits/stdc++.h>
using namespace std;
//设g[i]表示购买了i张邮票,买完剩下邮票需要的期望钱数.
//设f[i]表示拿到了i张邮票,要取完剩下邮票需要的期望次数.
//∴有n-i/n的几率拿到没有拿过的邮票,有i/n的几率拿到拿过的邮票.
//那么有:f[i]=((n-i)/n)*f[i+1]+(i/n)*f[i]+1.
//      ((n-i)/n)*f[i]=((n-i)/n)*f[i+1]+1.
//      f[i]=f[i+1]+((n-i)/n).
//又有:g[i]=(i/n)*(g[i]+f[i])+((n-i)/n)*(g[i+1]+f[i+1])+1.
//  即:g[i]=(i/(n-i))*(f[i]+1)+g[i+1]+f[i+1]+1.
long long n;
double f[10001],g[10001];
int main(){scanf("%lld",&n);for(long long i=n-1;i>=0;i--){f[i]=f[i+1]+(double)(1.0*n/(n-i));g[i]=(double)(1.0*i/(n-i))*(f[i]+1)+g[i+1]+f[i+1]+1;}printf("%.2lf",g[0]);
}

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论