竞赛总览

CSDN 编程竞赛二十九期:比赛详情 (csdn.net)

竞赛题解

题目1、订班服

小A班级订班服了!可是小A是个小糊涂鬼,整错了好多人的衣服的大小。小A只能自己掏钱包来补钱了。小A想知道自己至少需要买多少件衣服。

#include <cstdio>
#include <iostream>
#include <string>
#include <vector>int main () {int result = 0;int n;scanf ("%d", &n);std::vector<std::string> data [2];for (int i = 0; i < 2; i++) {for (int j = 0; j < n; j++) {std::string str;std::cin >> str;data [i].push_back (str);}}std::string str [] = {"M", "S", "L", "XL", "XLL", "XLLL", "XLLLL", "XLLLLL"};for (int i = 0; i < 8; i++) {int num = search (data [0], str [i]) - search (data [1], str [i]);result += num > 0 ? num : - num;}return 0;
}

此题通过比较两个列表的差异即可计算出答案。

例如,M、S、L被改为了M、S、XL,逐个计算每种型号出现的次数,M1=M2,S1=S2,L1=1但L2=0,所以检测出L这里出错1次。然而,检测到XL时,XL1=0、XL2=1,这里也出错一次。

这样扫描一遍之后,实际上L被改为了XL,但一次更改被统计了两次,所以还要除以2才能得到最终答案。

题目2、争抢糖豆

抓糖豆,小Q与小K都喜欢吃糖豆。但是糖豆分两种,超甜糖豆和普通糖豆。现在有w个超甜糖豆和b个普通糖豆。小Q和小K开始吃糖豆,他们决定谁先吃到超甜糖豆谁就获胜。小K每次吃的时时候会捏碎一颗糖豆。小Q先吃,小Q想知道自己获胜的概率。如果两个人都吃不到超甜糖豆小K获胜。

#include <cstdio>double dp [1005][1005];int main () {int w, b;scanf ("%d %d", &w, &b);for (int i = 1; i <= w; i++) dp [i][0] = 1;for (int i = 1; i <= b; i++) dp [0][i] = 0;for (int i = 1; i <= w; i++) {for (int j = 1; j <= b; j++) {dp [i][j] = (double) i / (i + j);dp [i][j] += j > 1 ? (double) j / (i + j) * (j - 1) / (i + j - 1) * i / (i + j - 2) * dp [i - 1][j - 2] : 0;dp [i][j] += j > 2 ? (double) j / (i + j) * (j - 1) / (i + j - 1) * (j - 2) / (i + j - 2) * dp [i][j - 3] : 0;}}printf ("%lf", dp [w][b]);return 0;
}

这道题目结合了动态规划和博弈论的知识,但分析过程不是很难,属于中等难度的题目。

用一个二维数组进行存储,第一个维度表示超甜糖豆数量,第二个维度表示普通糖豆数量,元素值表示当前情况下吃到超甜糖豆的概率。

初始化时,只有超甜糖豆情况下,获胜概率为1;只有普通糖豆情况下,获胜概率为0。

对于w个超甜糖豆和b个普通糖豆,吃到超甜糖豆的概率可以表示为w/(w+b)。

这里就要用到博弈论的知识了,首先从1个超甜糖豆和1个普通糖豆这种情况考虑,可以计算出这种条件下的获胜概率。超甜糖豆和普通糖豆之一的数量超过1时,可以通过游戏过程转移到这种情况。

游戏开始时,小Q先吃糖豆。如果小Q没胜利,小K(机器人)会执行最优策略,且执行操作之后,要么就是小K胜利,要么就是游戏未结束,又轮到小Q操作。整个过程中,小K操作时是全自动的,并且小K的操作取决于小Q之前一步的操作。只有轮到小Q操作时,才有一次主动选择权(虽然吃到的糖豆类型仍是未知的,但可以按照下棋的这种思想来分析)。

小Q吃到超甜糖豆游戏就会结束,概率为w/(w+b)。

没吃到超甜糖豆的概率为b/(w+b)。这时小K会开始吃,他也没吃到超甜糖豆游戏才会继续下去,否则就结束了。小K吃的时候会捏碎一颗糖豆,这时说明他已经将要吃的糖豆拿到了,而不是捏完再吃。因此,当两个人都没吃到超甜糖豆时,游戏继续,概率为b/(w+b) * (b-1)/(w+b-1)。

游戏继续时,分两种情况:捏碎超甜糖豆和捏碎普通糖豆。

捏碎超甜糖豆,概率为w/(w+b-2);捏碎普通糖豆,概率为(b-2)/(w+b-2)。

游戏继续,相对上一回合,糖豆数已经变少。这时,可以使用动态规划算法,套用之前算出来的概率,提升计算效率。

整个分析过程到此结束,其实这道题目并不是很难,但比较考验博弈论分析的基本功。

题目3、走楼梯

现在有一截楼梯,根据你的腿长,你一次能走1级或2级楼梯,已知你要走n级楼梯才能走到你的目的楼层,请实现一个方法,计算你走到目的楼层的方案数。

#include <cstdio>long long int dp [1005] = {1, 1, 2};int main () {for (int i = 3; i < 1005; i++) dp [i] = dp [i - 1] + dp [i - 2];return 0;
}

初始情况下,位于0级楼梯,到1级楼梯,只能上1级。到2级楼梯,可以0+1+1,也可以直接0+2。

要上到更高级别的楼梯,可以在前一级楼梯的基础上,再上1级;或者,在前两级楼梯的基础上,再上2级。

题目4、打家劫舍

一个小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算不触动警报装置的情况下,一夜之内能够偷窃到的最高金额。

经典的动态规划题目,和上楼梯这道题的难度差不多。

网上有很多打家劫舍题目系列的教程,包含这道题以及多种升级版形式,感兴趣的小伙伴可以搜索教程自学一下。

CSDN 编程竞赛二十九期题解相关推荐

  1. CSDN 编程竞赛二十八期题解

    竞赛总览 CSDN 编程竞赛二十八期:比赛详情 (csdn.net) 本期竞赛的题目都很简单,但是非常考验读题和编码速度.这一次没有遇到bug,竞赛体验较好. 竞赛题解 题目1.小Q的鲜榨柠檬汁 团建 ...

  2. CSDN 编程竞赛二十五期题解

    竞赛总览 CSDN 编程竞赛二十五期:比赛详情 (csdn.net) 本期竞赛第一题完成之后,提交代码显示运行中.自测也一直显示运行中,不能得到测试结果. 于是又赶紧完成第二题,但也显示运行中. 第三 ...

  3. CSDN 编程竞赛二十四期题解

    竞赛总览 CSDN 编程竞赛二十四期:比赛详情 (csdn.net) 本次竞赛感觉打模板的题变少了,而且多了很多可以集思广益的题目,参赛体验很好. 竞赛题解 题目1.计数问题 试计算在区间1到n的所有 ...

  4. CSDN 编程竞赛五十五期题解

    竞赛总览 CSDN 编程竞赛五十五期:比赛详情 (csdn.net) 吐槽:填空题参考答案错误,赛后竟然没有修正-- 竞赛题解 题目1.取石子 将n堆石子摆成一排.游戏规则:两人轮流从最左或最右的一堆 ...

  5. CSDN 编程竞赛二十一期题解

    竞赛总览 CSDN 编程竞赛二十一期:比赛详情 (csdn.net) 竞赛题解 题目1.合并序列 有N个单词和字符串T,按字典序输出以字符串T为前缀的所有单词. #include <cstdio ...

  6. CSDN 编程竞赛二十三期题解

    竞赛总览 CSDN 编程竞赛二十三期:比赛详情 (csdn.net) 竞赛题解 题目1.排查网络故障 A地跟B地的网络中间有n个节点(不包括A地和B地),相邻的两个节点是通过网线连接的.正常的情况下, ...

  7. CSDN 编程竞赛二十七期题解

    竞赛总览 CSDN 编程竞赛二十七期:比赛详情 (csdn.net) 四道题都不难,本来十分钟内就可以解决,但是这次竞赛bug比较多,体验不是很好. 竞赛题解 题目1.幸运数字 小艺定义一个幸运数字的 ...

  8. CSDN 编程竞赛三十一期题解

    竞赛总览 CSDN 编程竞赛三十一期:比赛详情 (csdn.net) 本次竞赛的最后一道题的描述部分有些问题(题目描述与样例不符),另外,测试数据似乎也有点问题,试了多种方式,但最多只能通过10%的测 ...

  9. CSDN 编程竞赛三十二期题解

    竞赛总览 CSDN 编程竞赛三十二期:比赛详情 (csdn.net) 竞赛题解 题目1.传奇霸业 传奇霸业,是兄弟就来干.小春(HP为a)遇到了一只黄金哥布林(HP为x).小春每次能对哥布林造成b点伤 ...

最新文章

  1. Python中处理时间 —— time模块
  2. python使用符号 表示单行注释-Pyhton中单行和多行注释的使用方法及规范
  3. 桌面计算机怎么覆盖文件,win7系统桌面快捷方式图标被未知文件覆盖如何解决...
  4. C语言fgets()函数(以指定长度读取文件中的字符,并存入字符数组变量中)
  5. Linux环境配置1
  6. C#学习笔记(集合)
  7. 车站计算机联锁系统的仿真设计,车站计算机联锁仿真设计.doc
  8. AirFlow常见问题汇总
  9. 第10讲 | 深入区块链技术(二):P2P网络
  10. JavaScript学习笔记(三)——从简单模仿到创作
  11. Web设计里的软件工程思想
  12. OPCServer:使用Matrikon OPC Server Simulation
  13. 利用LFW对人脸识别模型进行精度评测
  14. aspnetpager使用介绍
  15. 计算机桌面变蓝屏,电脑进入桌面蓝屏解决方法
  16. MySQL数据库基础--数据管理
  17. AI留给教练的时间已经不多了
  18. 【SpringBoot】十二、@Scheduled定时任务(源码)
  19. HTML+CSS登录注册界面
  20. 世界上最健康的程序员作息表「值得一看」

热门文章

  1. 一文读懂5大云厂商有什么不同
  2. python零基础cap_零基础学Python语言CAP
  3. Mathematica消除所有变量
  4. fabric roles
  5. 基于RS的城市土地利用变化
  6. CMake I 编译静态库、动态库和对象库
  7. 哪吒壁纸来袭,教你不用PS也能制作哪吒1080P超清壁纸,你不看看
  8. Mac OS安装Redis
  9. 叠瓦式硬盘 微型计算机,叠瓦式硬盘到底多坑人,你还敢乱买吗?我来告诉你原因...
  10. 拼多多店群如何精细化运营,掌握蓝海选品思路轻松月入过万