uva 10288 - Coupons(概率)
来源:互联网 发布:统计贸易数据自查报告 编辑:程序博客网 时间:2024/05/01 04:36
题目链接:uva 10288 - Coupons
题目大意:给定n,为有n中兑换卷,现在每开一次箱子,就能等概率的获得其中的一种兑换卷。问说平均情况下需要开多少个箱子才能集齐n种兑换卷。
解题思路:dp[i]表示还有i种没获得,dp[i]=n−in∗dp[i]+in∗dp[i−1]+1
===》dp[i]=dp[i−1]+ni
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long type;struct Fraction { type member; // 分子; type denominator; // 分母; Fraction (type member = 0, type denominator = 1); void operator = (type x) { this->set(x, 1); } Fraction operator * (const Fraction& u); Fraction operator / (const Fraction& u); Fraction operator + (const Fraction& u); Fraction operator - (const Fraction& u); void set(type member, type denominator);};inline type gcd (type a, type b) { return b == 0 ? a : gcd(b, a % b);}/*Code*//////////////////////////////////////////////////////const int maxn = 33;typedef long long ll;Fraction dp[maxn+5][maxn+5];void init () { for (int i = 1; i <= maxn; i++) { dp[i][0] = 0; for (int j = 1; j <= i; j++) //dp[i][j] = (dp[i][j-1] * Fraction(j, i) + Fraction(1, 1)) / Fraction(j, i); dp[i][j] = dp[i][j-1] + Fraction(i, j); }}inline int countbit (ll u) { int ret = 0; while (u) { ret++; u /= 10; } return ret;}void put_ans (Fraction u) { type d = u.member / u.denominator; type member = u.member % u.denominator; int cn = countbit(d); int cd = countbit(u.denominator); int n = cn + (cn == 0 ? 0 : 1); if (member) { for (int i = 0; i < n; i++) printf(" "); printf("%lld\n", member); } printf("%lld", d); if (member) { if (d) printf(" "); for (int i = 0; i < cd; i++) printf("-"); printf("\n"); for (int i = 0; i < n; i++) printf(" "); printf("%lld", u.denominator); } printf("\n");}int main () { int n; init(); while (scanf("%d", &n) == 1) { put_ans(dp[n][n]); } return 0;}/////////////////////////////////////////////////////Fraction::Fraction (type member, type denominator) { this->set(member, denominator);}Fraction Fraction::operator * (const Fraction& u) { return Fraction(member * u.member, denominator * u.denominator);}Fraction Fraction::operator / (const Fraction& u) { return Fraction(member * u.denominator, denominator * u.member);}Fraction Fraction::operator + (const Fraction& u) { return Fraction(member * u.denominator + denominator * u.member, denominator * u.denominator);}Fraction Fraction::operator - (const Fraction& u) { return Fraction(member * u.denominator - denominator * u.member, denominator * u.denominator);}void Fraction::set (type member, type denominator) { type tmp_d = gcd(member, denominator); this->member = member / tmp_d; this->denominator = denominator / tmp_d;}
1 0
- uva 10288 - Coupons(概率)
- Coupons - UVa 10288 概率dp
- 【UVA】10288-Coupons(概率)
- UVA 10288 - Coupons(概率递推)
- UVA - 10288 Coupons (概率+递推)
- Uva 10288 Coupons (概率dp)
- Uva 10288 - Coupons
- UVA 10288 - Coupons
- uva 10288 coupons
- UVA 10288 Coupons
- UVA 10288 - Coupons
- UVa 10288 Coupons
- UVA 10288(p333)----Coupons
- uva 10288 Coupons
- uva 10288 Coupons
- Uva 10288 Coupons
- UVA 10288 Coupons
- UVa 10288(Coupons) 数学期望(概率+递推) Java
- 网络访问流程
- Linux C++ 使用condition实现阻塞队列
- 奇怪的分式
- 东软学习,sql工具类
- 合同如火如荼有态度与合同任何人
- uva 10288 - Coupons(概率)
- 2014腾讯实习校招
- poj 2296 2-SAT(无矩形相交的最大边长)
- Porting WiFi drivers to Android
- 1050 moving table
- 有罪推定
- MySQL存储二进制数据
- iOS应用程序生命周期各个函数方法详解
- 和他人还让他好如同废物染发如果风王夫人个人各