2021.09 ccf csp 第四题 收集卡牌

思路

这题如果直接计算,因为不同的分类种数太多,枚举所有的分类情况是一个几乎不可能的复杂任务。

但不同摸牌次数,不同已摸出牌种类的子问题的答案之间,具有一定的递推关系。这种特征说明该问题可以使用动态规划来解决。

设$dp[i][j]$为动态规划状态,其中$i$表示已摸出牌种类的二进制,$i$从右数第$k$位表示第$k$种牌是否被摸到过,$j$表示摸到的牌总张数。设$cnt[i]$为当前摸到牌的种类数。

这样可以一次兑换到所有没摸到牌的条件是$(j-cnt[i])/k+cnt[i]==n$,去掉$cnt[i]$种已摸到的牌之后,剩下的$k$张换$1$张,恰好能换到所有没摸到的牌。

因为给定$dp[i][j]$,没有办法枚举每个$dp[i][j]$依赖的$dp$元素。所以只能用更新法,更新每个依赖$dp[i][j]$的$dp$元素。

代码

#include <bits/stdc++.h>
using namespace std; int n, k;
double p[18];
double dp[(1 << 16) + 5][90];
int cnt[(1 << 16) + 5];
double ans; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); cin >> n >> k;
for (int i = 0; i < n; ++i)
cin >> p[i]; int upper = 1 << n;
for (int i = 1; i < upper; ++i) {
int x = i;
while (x)
x &= x - 1, ++cnt[i];
} dp[0][0] = 1.0;
for (int i = 0; i < upper; ++i) {
for (int j = 0; j < 90; ++j) {
if ((j - cnt[i]) / k + cnt[i] == n) {
ans += dp[i][j] * j;
continue;
}
for (int m = 0; m < n; ++m) {
if (i & (1 << m))
dp[i][j + 1] += dp[i][j] * p[m];
else
dp[i | (1 << m)][j + 1] += dp[i][j] * p[m];
}
}
}
cout << fixed << setprecision(10) << ans << endl;
return 0;
}

2021.09 ccf csp 第四题 收集卡牌的更多相关文章

  1. 第九次CSP第四题 - 压缩编码

    给定一段文字,已知单词a1, a2, …, an出现的频率分别t1, t2, …, tn.可以用01串给这些单词编码,即将每个单词与一个01串对应,使得任何一个单词的编码(对应的01串)不是另一个单词 ...

  2. CCF CSP 认证

    参加第八次CCF CSP认证记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四 ...

  3. CCF CSP 201703

    CCF CSP 2017·03 做了一段时间的CCF CSP试题,个人感觉是这样分布的 A.B题基本纯暴力可满分 B题留心数据范围 C题是个大模拟,留心即可 D题更倾向于图论?(个人做到的D题基本都是 ...

  4. CCF CSP 201409-3 字符串匹配

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-3 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那 ...

  5. CCF CSP 201503-3 节日

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-3 节日 问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形 ...

  6. CCF CSP 201604-2 俄罗斯方块

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201604-2 俄罗斯方块 问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游 ...

  7. CCF CSP 201403-4 无线网络

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-4 无线网络 问题描述 目前在一个很大的平面房间里有 n 个无线路由器,每个无线路 ...

  8. CCF CSP 201312-4 有趣的数

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-4 有趣的数 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0 ...

  9. CCF CSP 201604-4 游戏

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201604-4 游戏 问题描述 小明在玩一个电脑游戏,游戏在一个n×m的方格图上进行,小明控制 ...

  10. CCF CSP 201509-4 高速公路

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201509-4 高速公路 问题描述 某国有n个城市,为了使得城市间的交通更便利,该国国王打算在 ...

随机推荐

  1. 你的 GitHub 年度报告「GitHub 热点速览 v.22.52」

    辞旧迎新的日子,又是年度报告满天飞的时候.GitHub 也不落其他平台之后,推出了用户 GitHub Contributions 报告.不知道,今年的你是不是比去年搬了更多的砖呢?在本期的 News ...

  2. Hadoop详解(03)-Hadoop编译源码-了解

    Hadoop详解(03)-Hadoop编译源码-了解 准备工作 CentOS联网 配置CentOS能连接外网.Linux虚拟机ping www.baidu.com 是畅通的 jar包准备(hadoop ...

  3. 高并发解决方案orleans实践

    开具一张图,展开来聊天.有从单个服务.consul集群和orleans来展开高并发测试一个小小数据库并发实例. 首先介绍下场景,创建一个order,同时去product表里面减掉一个库存.很简单的业务 ...

  4. [cocos2d-x]飞机大战 遇到的bug和总结(二)

    第一点 声音文件最好不要使用mp3格式,因为我在同时使用背景音乐和playeffect()的时候,出现了bug,两者的音效不能同时出现(应该是格式问题),并且声音在windows上运行的时候加载非常慢 ...

  5. react 高效高质量搭建后台系统 系列 —— 登录

    其他章节请看: react 高效高质量搭建后台系统 系列 登录 本篇将完成登录模块.效果和 spug 相同: 需求如下: 登录页的绘制 支持普通登录和LDAP登录 登录成功后跳转到主页,没有登录的情况 ...

  6. react系列-从0开始搭建一个react项目

    从0开始搭建一个react项目 1.安装脚手架 npm install -g create-react-app 2.创建项目 D: //进入D盘 mkdir ReactDemo //创建ReactDe ...

  7. Sublime下运行javascript,并带彩色提示

    最近和各种同事磨合技术,自闭中~ 首先让JS在Sublime上运行 去下载Node.js并且安装 安装完成后 cmd 输入 node -v 查看安装是否成功. 接着打开Sublime - 工具 > ...

  8. SpringBoot 整合Seccurity、权限管理

    Spring Boot 整合Spring Seccurity 1.创建maven工程 <?xml version="1.0" encoding="UTF-8&quo ...

  9. react 高效高质量搭建后台系统 系列 —— 结尾

    其他章节请看: react 高效高质量搭建后台系统 系列 尾篇 本篇主要介绍表单查询.表单验证.通知(WebSocket).自动构建.最后附上 myspug 项目源码. 项目最终效果: 表单查询 需求 ...

  10. 三天吃透Spring面试八股文(最新整理)

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...