题解系列019 + 比赛系列008 | CSDN 第二十三届编程竞赛题解 + 建议

一. 总体情况

得分: 25+25+10+25=85 (排名第 9)

在这里插入图片描述

二. 题目分析

第一题: 排查网络故障

题目

在这里插入图片描述

分析

本题十分简单, 只需考虑最坏情况, 从而尽量找靠中间的管道检查, 然后递推即可 (当然也可以一次性建立表达式).

代码
import math

def find_times(n):
    if n==2:
        return 0
    return find_times(math.floor(n/2)+1)+1

class Solution:
    def __init__(self) -> None:
        pass
    
    def solution(self, n):
        result = None

        result = find_times(n+2)

        return result

if __name__ == "__main__":


    n = int(input().strip())
    
    sol = Solution()
    result = sol.solution(n)

    print(result)

第二题: 零钱兑换

题目

在这里插入图片描述

分析

本题的输入处理确实有点耗时 qwq, 但其他部分还好, 一个简单的动态规划就能解决问题 (循环中看一下把 i i i 局部换成 i − j i-j ij 能否达到更好效果).

代码
class Solution:
    def __init__(self) -> None:
        pass
    
    def solution(self, arr, targ):
        result = None

        dp = [targ + 1]*(targ +1)  
        dp[0] = 0  
        for i in range(1, targ + 1): 
            for j in arr:  
                if j <= i: 
                    dp[i] = min(dp[i], dp[i-j]+1)
         
        if dp[targ] > targ:
            return -1
        else:
            return dp[targ]

        return result

if __name__ == "__main__":


    strr = input().strip()
    
    strtmp = strr.split(',')
    
    str1 = []
    targ=0
    l = len(strtmp)
    
    if l==2:
        str1 = strtmp[0][1:-1]
        targ = strtmp[1]
    else:
        for j in range(l-1):
            if j==0:
                str1.append(strtmp[j][1:])
            elif j==l-2:
                str1.append(strtmp[j][:-1])
            else:
                str1.append(strtmp[j])
    targ = strtmp[l-1]
    
    newstr1 = [int(item) for item in str1]
    newaim = int(targ)
    
    sol = Solution()
    result = sol.solution(newstr1, newaim)

    print(result)

第三题: 清理磁盘空间

题目

在这里插入图片描述

第四题: 交际圈

题目

在这里插入图片描述

分析

经典的并查集问题: 详情可以看这里: 传送门. 主要策略在于路径压缩.


欢迎关注我的博客!
Find me on GitHub: GitHub profile page
Gitee account (under construction): Gitee site
GitLab account (under construction): GitLab site
Also find me on Luogu:Luogu profile
欢迎大家关注我,在项目上与我协作哦!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值