zoukankan      html  css  js  c++  java
  • 洛谷P4550 【收集邮票】

    题目链接:

    神仙题QAQ

    题目分析:

    概率期望题是不可能会的,一辈子都不可能会的QAQ
    这个题也太仙了
    首先明确一下题意里面我感觉没太说清楚的地方,这里是抽到第(i)次要(i)元钱,不是抽到第(i)不然就是一眼题了

    我们定义两个数组,(f[i])(g[i]),分别表示现在取到第(i)张,要取完剩下的期望次数,以及现在取到第(i)张,要取完剩下的期望价格
    对于(f[i]),首先显然(f[n] = 0), 然后考虑如何转移
    抽一次有两种情况,抽到有的和没有的,抽到已经有的概率是(frac{i}{n}),期望是(frac{i}{n} * f[i]),抽到没有的概率是(frac{n - i}{n}),期望是(frac{n-i}{n} * f[i + 1]),然后算上自己的期望为(1)
    于是有状态转移方程:(f[i] = frac{i}{n} * f[i] + frac{n-i}{n} * f[i + 1] + 1)
    化简一下得到(f[i] = f[i + 1] + frac{n}{n - i})


    博主要从机房回家了QAQ回去继续写

    好我回家了,继续


    对于(g[i]),首先显然(g[n] = 0), 然后考虑如何转移
    抽一次有两种情况,抽到有的和没有的,抽到已经有的概率是(frac{i}{n}),期望是(frac{i}{n} * (g[i] + f[i] + 1)),抽到没有的概率是(frac{n - i}{n}),期望是(frac{n-i}{n} * (g[i + 1] + f[i + 1] + 1))
    于是有状态转移方程:(g[i] = frac{i}{n} * (g[i] + f[i] + 1) + frac{n-i}{n} * (g[i + 1] + f[i + 1] + 1))
    化简一下得到(g[i] = frac{i}{n - i} * f[i] + frac{n}{n - i} + g[i + 1] + f[i + 1])

    然后我们先跑(f)数组,再用(f)数组更新(g)数组就(ok)

    就一个感想,这是怎么想到的,这又是怎么想到的
    题还是做太少啦

    代码:

    #include <bits/stdc++.h>
    #define N (10000 + 10)
    using namespace std;
    inline int read() {
    	int cnt = 0, f = 1; char c = getchar();
    	while (!isdigit(c)) {if (c == '-') f = -f; c = getchar();}
    	while (isdigit(c)) {cnt = (cnt << 3) + (cnt << 1) + c - '0'; c = getchar();}
    	return cnt * f;
    }
    int n;
    double f[N], g[N];
    signed main() {
    	n = read();
    	f[n] = 0, g[n] = 0;
    	for (register int i = n - 1; ~i; --i) {
    		f[i] = f[i + 1] + 1.0 * n / (1.0 * (n - i));
    		g[i] = 1.0 * i / (1.0 * (n - i)) * f[i] + 1.0 * n / (1.0 *(n - i)) + g[i + 1] + f[i + 1]; 
    	}
    	printf("%.2lf", g[0]);
    	return 0;
    }
    
  • 相关阅读:
    C#中添加文本框的上标及文字大小
    综采工作面设备接替计划管理系统
    一位年轻女董事长的27条忠告
    开发人员一定要加入收藏夹的网站
    哈佛图书馆墙上的名训
    加密、解密.NET字符串
    C#文件上传下载
    DotNetNuke3.0.8 简体中文语言包(可直接导入版)发布
    DNN的Core Team
    DotNetNuke3.0.8文件管理器的错误及解决方法
  • 原文地址:https://www.cnblogs.com/kma093/p/11341306.html
Copyright © 2011-2022 走看看