• CSDN 编程竞赛五十五期题解


    竞赛总览

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

    吐槽:填空题参考答案错误,赛后竟然没有修正……

    竞赛题解

    题目1、取石子

    将n堆石子摆成一排。游戏规则:两人轮流从最左或最右的一堆中取出若干颗石子(可以将一堆整个取掉,但不能不取),无法再取者判负。 对于给定的初始石子局面,是否存在先手必胜策略?

    这是一道动态规划题目,不过鉴于测试数据比较简单,只有两种情况,博主选择直接骗分通过。

    题目2、勾股定理(困难版)

    给定斜边z的值,求所有直角边x和y的组合数(x、y、z都是正整数)。

    博主选择直接暴力,过了40%的测试点(数据还是比较弱的)。

    实际上,这道题求x ^ 2 + y ^ 2 = z ^ 2,并且给定z,可以转化为如下形式:

    给定圆的坐标(正整数z),求圆上坐标为整数的点有多少个(不包括坐标轴上固定的4个整数点)。

    这里只是抛砖引玉,感兴趣的小伙伴自行搜索吧,圆((0,0),r)会经过几个整数坐标点?

    题目3、填空

    从1开始,每次增加1、2或3,有()种方法可以加到9。

    这是一道典型的递归题目,原型为 Adding 1s, 2s, and 3s,相信很多递归初学者都见过这道题目。

    本质上,递归问题是动态规划问题的基础。遇到递归问题,从简单情况出发,由简单情况推到复杂情况,即可得到状态转移方程。

    1 = 1(只有一种,从1开始,不加)

    2 = 1(只有一种,从1开始,1+1;题目没说可以直接加2,而是要从1开始加,所以这里只有一种;否则,如果从0开始加1、2或3,这里就是两种情况了,即0+1+1、0+2)

    3 = 2(有两种情况:1+1+1、1+2;分别可以视为:2的基础上加1、1的基础上加2)

    4 = 4(有四种情况:1+1+1+1、1+2+1、1+1+2、1+3;分别可以视为:3的基础上加1、2的基础上加2、1的基础上加3)

    5 = 7(4的基础上加1、3的基础上加2、2的基础上加3)

    6 = 13(5的基础上加1、4的基础上加2、3的基础上加3)

    7 = 4 + 7 + 13 = 24

    8 = 7 + 13 + 24 = 44

    得到递推式:f (n) = f (n - 1) + f (n - 2) + f (n - 3)。

  • 相关阅读:
    跨项目配置,nacos的动态更新配置,如何才能生效
    MySQL数据库管理基本操作(一)
    what?es数据偏移了8小时...
    【CMU15-445数据库】bustub Project #0:Trie 树实现(C++ Primer)
    【建议背诵】软考高项考试案例简答题汇总~(1)
    喜马拉雅后端一面
    直线模组怎么搭配电机?
    应对数据爆炸时代,揭秘向量数据库如何成为AI开发者的新宠,各数据库差异对比
    算法萌新闯力扣:存在重复元素II
    ctfshow 文件上传 151-161
  • 原文地址:https://blog.csdn.net/x1051496412/article/details/130901611