• UVA


    题形:概率DP

    题意:收集齐n个不同的优惠卷的期望开箱次数。(开一次箱子会等概率的得到其中一张优惠卷)

    思路:

    期望递推法。

    正常做就行。就是分数输出麻烦了点。

    e[i] = i/n(e[i]+1) + (n-i)/n(e[i+1]+1)

    然后移项,递推就行了。

    代码:

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    #define N 50 
    
    struct fraction {
        long long numerator; // 分子
        long long denominator; // 分母
        fraction() {
            numerator = 0;
            denominator = 1;
        }
        fraction(long long num) {
            numerator = num;
            denominator = 1;
        }
        fraction(long long a, long long b) {
            numerator = a;
            denominator = b;
            this->reduction();
        }
    
        void operator = (const long long num) {
            numerator = num;
            denominator = 1;
            this->reduction();
        }
    
        void operator = (const fraction &b) {
            numerator = b.numerator;
            denominator = b.denominator;
            this->reduction();
        }
    
        fraction operator + (const fraction &b) const {
            long long gcdnum = __gcd(denominator, b.denominator);
            fraction tmp = fraction(numerator*(b.denominator/gcdnum) + b.numerator*(denominator/gcdnum), denominator/gcdnum*b.denominator);
            tmp.reduction();
            return tmp;
        }
    
        fraction operator + (const int &b) const {
            return ((*this) + fraction(b));
        }
    
        fraction operator - (const fraction &b) const {
            return ((*this) + fraction(-b.numerator, b.denominator));
        }
        
        fraction operator - (const int &b) const {
            return ((*this) - fraction(b));
        }
    
        fraction operator * (const fraction &b) const {
            fraction tmp = fraction(numerator*b.numerator, denominator * b.denominator);
            tmp.reduction();
            return tmp;
        }
    
        fraction operator * (const int &b) const {
            return ((*this) * fraction(b));
        }
        
        fraction operator / (const fraction &b) const {
            return ((*this) * fraction(b.denominator, b.numerator));
        }
    
        void reduction() {
            if (numerator == 0) {
                denominator = 1;
                return;
            }
            long long gcdnum = __gcd(numerator, denominator);
            numerator /= gcdnum;
            denominator /= gcdnum;
        }
        void print() {
            if (denominator == 1) printf("%lld
    ", numerator);
            else {
                long long num = numerator/denominator;
                long long tmp = num;
                int len = 0;
                while (tmp) {
                    len++;
                    tmp/=10;
                }
    
                for (int i = 0; i < len; i++) printf(" ");
                if (len != 0) printf(" ");
                printf("%lld
    ",numerator%denominator);
    
                if (num != 0) printf("%lld ", num);
                tmp = denominator;
                while (tmp) {
                    printf("-");
                    tmp/=10;
                }
                puts("");
    
                for (int i = 0; i < len; i++) printf(" ");
                if (len != 0) printf(" ");
                printf("%lld
    ",denominator);
            }
            //printf("%lld/%lld
    ", numerator, denominator);
        }
    };
    
    fraction e[N];
    
    int main() {
        int n;
        while (scanf("%d", &n) != EOF) {
            e[n] = 0;
            for (int i = n-1; i >= 0; i--) {
                e[i] = (fraction(i,n) + fraction(n-i,n)*(e[i+1]+1)) / fraction(n-i,n);
            }
            e[0].print();
        }
        return 0;
    }
  • 相关阅读:
    如何利用书签向word文档读取或写入数据[C#](
    一个较为完整的例子,还可以,简单一些的
    GridView的RowDataBound事件可做的一些事情
    ASP.NET中DataGrid和DataList控件用法比较
    GridView中绑定数据字段时可做的几种操作方法
    GridView中如何取得隐藏列的值
    一些常用的算法技巧总结
    位运算装逼指南
    小胖求学系列之文档生成利器(上)smartdoc
    系统监控之硬盘使用率
  • 原文地址:https://www.cnblogs.com/shinecheng/p/3586654.html
Copyright © 2020-2023  润新知