题目地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2709

题解:  1   组合数的计算,用DP,速度又快又简洁。

2  首先用一个map统计出现了那些字母,以及对应的次数,然后n-总次数得到还有多少个字母可以分配,按照题意,只能是已经出现的字母。

想到Robbers那一题,感觉分给已经出现次数最多的比较好,或者像那题一样尽量按照比例分配,但是最后试了一下案例,探索发现案例的结果是在 28,:11:11:                    5:5的时候取到。

和按比例分很接近,但是49按比例分出44后,剩下的5不知按什么想啊分出3:1:1

3  然后YY了一下贪心,维护一个优先权队列,按每次增加一个给这个概率增加的比例选择,每次选择了以后就更新一下队列里这个struct  这个struct由在中奖字符串中                       出现的次数a,非配给这个字符的b,还有比例r =(b+1)/(b-a+1);

最后ac了,但是道理没想得很清楚

#include<queue>
#include<iostream>
#include<map>
#include<string>
#include<algorithm>
using namespace std;typedef long long inta;struct    rate
{int id;int a;int b;double  r;bool operator<(const  rate & b)  const{return r<b.r;}
};
inta gcd(inta a,inta b)
{if(b==0)  return a;else return gcd(b,a%b);}//int ratecmp(rate x,rate y)
//{
//   if(x.r>y.r)  return 1;
//   else return 0;
//}int main()
{int  n;inta  c[65][65];for(int i=0;i<65;i++){c[i][0]=1;c[i][i]=1;}for(int i=1;i<65;i++)for(int j=1;j<i;j++){c[i][j]=c[i-1][j]+c[i-1][j-1];}while(cin>>n){map<char,int>   themap;string win;cin>>win;int m=win.length();int all=n-m;for(int i=0;i<m;i++)themap[win[i]]++;int size=themap.size();int  *p=new int [size];map<char,int> ::iterator it;int count=0;for(it=themap.begin();count<size;count++,it++){p[count]=it->second;}sort(p,p+size);
//       for(int i=0;i<count;i++)
//        cout<<p[i]<<endl;priority_queue<rate>   pq;for(int i=0;i<size;i++){rate temp;temp.a=p[i];temp.b=p[i];temp.id=i;temp.r=p[i]+1;pq.push(temp);}for(int i=0;i<all;i++)     // 将余下的分配完{rate ra=pq.top();pq.pop();ra.b++;ra.r=ra.b+1;ra.r/=(ra.b-ra.a+1);pq.push(ra);}inta up=1;while(pq.size()!=0){up*=c[pq.top().b][pq.top().a];pq.pop();}inta down=c[n][m];inta thegcd=gcd(up,down);up/=thegcd;down/=thegcd;cout<<up<<"/"<<down<<endl;inta up1=1;up1=c[p[0]+all][p[0]];inta down1=c[n][m];inta thegcd1=gcd(up1,down1);up1/=thegcd1;down1/=thegcd1;cout<<up1<<"/"<<down1<<endl;cout<<endl;}
}

转载于:https://www.cnblogs.com/814jingqi/p/3247192.html

zoj 2709 Lottery 组合数,概率,贪心 (8-F)相关推荐

  1. ZOJ 3380 Patchouli's Spell Cards——组合数+概率dp

    题意: m个位置,每个位置可以等概率填n种数,规定一个数字出现次数不能超过L次(注意不是连续L次),填完m个位置后满足约束的概率是多少. 思路: 定义dp[i][j]为前i种数字填充j个位置(j个位置 ...

  2. 【NWPU2018 练着玩】入门班day1 枚举贪心[Cloned] F - Claris and XOR (HDU-5661 Claris and XOR )

    题目链接:https://vjudge.net/contest/246949#problem/F 先参考大佬的博客: https://blog.csdn.net/idealism_xxm/articl ...

  3. ZOJ 3829 Known Notation(贪心)题解

    题意:给一串字符,问你最少几步能变成后缀表达式.后缀表达式定义为,1 * 1 = 1 1 *,题目所给出的字串不带空格.你可以进行两种操作:加数字,交换任意两个字符. 思路:(不)显然,最终结果数字比 ...

  4. 算法笔记练习 4.4 贪心 问题 F: 迷瘴

    算法笔记练习 题解合集 题目链接 题目 题目描述 小明正在玩游戏,他控制的角色正面临着幽谷的考验-- 幽谷周围瘴气弥漫,静的可怕,隐约可见地上堆满了骷髅.由于此处长年不见天日,导致空气中布满了毒素,一 ...

  5. F分布概率密度函数的推导

    推导过程整理自https://www.bilibili.com/video/BV1qf4y1R7FA. 文章目录 预备知识 Γ \Gamma Γ函数(伽马函数) 标准正态分布 卡方分布 推导目标 引理 ...

  6. POJ-2151 Check the difficulty of problems 概率DP

    题目链接:http://poj.org/problem?id=2151 组合数做肯定超时,容易看出是DP.f[i][j]表示某个队的前j个题目做出i个题目的概率,则f[i][j]=f[i][j-1]* ...

  7. 概率破玄机,统计解迷离

    概率破玄机,统计解迷离 概率论起源于中世纪的欧洲,那时盛行掷骰子赌博,提出了许多有趣的概率问题.当时法国的帕斯卡(Blaise Pascal).费尔马(Pierre de Fermat)和旅居巴黎的荷 ...

  8. 概率与期望,成为预言家的第一步

    文章目录 参考文献 概率初解 期望 期望的定义与性质 期望定义 期望性质 证明性质 性质1 性质2 题目练习 例题 简单期望 概率DP 条件期望 题目 期望初练 二次期望 简单期望题 转化题目意思 三 ...

  9. 概率与期望做题笔记1

    文章目录 P1850 - [NOIP2016 提高组] 换教室 P3802 - 小魔女帕琪 P4550 - 收集邮票 Coupon collector's problem P3239 - [HNOI2 ...

最新文章

  1. 非计算机专业毕业论文用游戏,计算机专业大学生毕业论文
  2. 她是数学奇女子,巴贝奇的好友,却没能等到计算机的辉煌时刻
  3. 使用 utmpdump 监控 CentOS 用户登录历史
  4. python图像处理实战 戴伊_这一套封面的程序员专业书籍你读过哪一本?
  5. 二十年后我发明了保姆机器人作文_我想发明保姆机器人作文700字
  6. [机器学习] Boosting算法2 --- GBDT
  7. JsonCpp 入门教程
  8. 【转】Zookeeper入门
  9. android之activety生命周期
  10. H.264中整数DCT变换,量化,反量化,反DCT究竟是如何实现的?(无代码,无真相)
  11. Python全栈之路系列之列表数据类型
  12. kepware mysql_Kepware实现向数据库实时写入数据
  13. Spring Boot 设置允许跨域的两种配置方式
  14. 互补滤波系数_四元数+互补滤波
  15. React.memo Component definition is missing display name
  16. 你离大厂前端工作,升职加薪有时就差一点算法,今天全部教给你!
  17. 软件测试周刊(第36期):为什么你要当程序员?
  18. Spring的下载及目录结构
  19. 集成学习:机器学习兵器谱的“屠龙刀”
  20. 2015年P2P理财必看的10大常识

热门文章

  1. 使用Entity Framework code first, migration
  2. Effective C++ 条款05
  3. PHP+mysql+ajax搭建图书管理系统
  4. mysql更新一个表里的字段等于另一个表某字段的值
  5. HDU4846Task treap + 贪心
  6. java 重定向和转发(转载)
  7. 使用OleDb,将Excel导入DataSet
  8. Caffe、TensorFlow、MXnet三库对比
  9. [转]Entity Framework4.0 (七) EF4的存储过程
  10. 初探swift语言的学习笔记五(线程)