【CSDN周赛29期】

文章包含四个编程问题:小A需要解决班服大小调换的问题;小Q和小K争抢超甜糖豆,计算获胜概率;走楼梯的方案数计算;以及考虑相邻房屋防盗系统的打家劫舍问题。每个问题都涉及到数学和算法,特别是动态规划的应用。
摘要由CSDN通过智能技术生成

T1 订班服

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

n = int(input())
num1 = []
num2 = []
ans = 0
for i in range(n):
	num1.append(input())
for i in range(n):
	num2.append(input())
	
num = ["M","S","L","XL","XLL","XLLL","XLLLL","XLLLLL"]

for i in range(len(num)):
	ans += abs(num1.count(num[i]) - num2.count(num[i]))
print(ans // 2)

T2 争抢糖豆

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

w, b = [int(item) for item in input().strip().split()]

dp = [[0]*(b+1) for i in range(w+1)]
for i in range(1,w+1):
	dp[i][0] = 1
for i in range(b+1):
	dp[0][b] = 0
for i in range(1,w+1):
	for j in range(b+1):
		dp[i][j] = i/(i+j)
	if j >= 2:
		dp[i][j] += j/(i+j)*(j-1)/(i+j-1)*i/(i+j-2)*dp[i-1][j-2]
	if j >= 3:
		dp[i][j] += j/(i+j)*(j-1)/(i+j-1)*(j-2)/(i+j-2)*dp[i][j-3]

print(f'{dp[w][b]:.9f}')

T3 走楼梯

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

n = int(input())
if n<=2:
	print(n)
else:
	f_1, f_2 = 1, 2
	f = 0
	for i in range(2, n):
		f = f_1 + f_2
		f_1 = f_2
		f_2 = f
print(f)

T4 打家劫舍

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

n = int(input())
nums = [int(i) for i in input().split()]
dp = [0] * len(nums)
if len(nums) == 0:
	print("0")
elif len(nums) == 1:
	print(nums[0])
elif len(nums) == 2:
	print(max(nums[0],nums[1]))
else:
	dp[0] = nums[0]
	dp[1] = max(nums[0],nums[1])
for i in range(2,len(nums)):
	dp[i] = max(dp[i-2]+nums[i],dp[i-1])
print(dp[-1])
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大学生编程地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值