洛谷3501宝牌一大堆
这道题很长
一读完可以发现不是模拟题,那么这道题还有这么多情况供我们去讨论,则一般都是可以去掉一些情况的
我们发现,对任意一种和牌,如果有杠子,我们把这个杠子换成少一张牌的刻字答案是会变得更优的(很简单的列算式)
所以就不用考虑大于15张牌的情况了
对于国士无双暴力即可
对于七对子,算出每一种雀头的贡献(如果是宝牌记得乘以4,),然后从大到小排序选择即可
对于
这个时候不要被蓝书上面那道扑克牌的期望题的方程给禁锢了,非要把每一种牌的数量列出来,我们这里扩宽一点思路,按照第一篇题解的方程去列
然后再说一下这个刷表法,第一篇题解的代码中有一个片段是
for(int p = 1; p <= 2; ++p)
if(j+p<=4 && i>=2 && cnt[i+1]>=p && c1<=cnt[i]-p && c2<=cnt[i-1]-p)
chkmax(f[i+1][j+p][k][p][c1+p], f[i][j][k][c1][c2] / C(cnt[i], c1) / C(cnt[i-1], c2) * C(cnt[i+1], p) * C(cnt[i], c1+p) * C(cnt[i-1], c2+p) * cbp(i+1, p) * cbp(i, p) * cbp(i-1, p));
//刻子*1+顺子*1
这里在转移的时候如果要把第i+1种牌弄成顺子,就要同时选第i-1种牌和第i种牌,容易知道这样是不会漏掉最优解的,也许这是刷表法经常用的操作。你不能单独只考虑第i+1种牌去弄成顺子,尽管有c1和c2,但你不知道第i种牌和第i-1种牌是否参与其他顺子的形成,所以我们直接各多选即可(其实有单出来的根本是不能够和牌的,我们的状态应该不包括这一部分,所以也要各多选择)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2021-10-07 蒜头君的项链的补充