蓝桥杯练习3

n = int(input())
dict = {'I': 1, 'IV': 4, 'V': 5, 'IX': 9, 'X': 10, 'XL': 40, 'L': 50, 'XC': 90, 'C': 100, 'CD': 400, 'D': 500,
        'CM': 900, 'M': 1000}
for i in range(n):
    ans = 0
    exp = input()
    if exp[:2] in dict:
        ans += dict[exp[:2]]
        for j in exp[2:]:
            ans += dict[j]
        print(ans)
    else:
        for j in exp:
            ans += dict[j]
        print(ans)

思路:穷举

l, r = map(int, input().split())
ans = 0
for i in range(l, r + 1):
    ans += str(i).count('2')
print(ans)

n = int(input())
exp = list(input().split())
for i in range(n):
    exp[i] = int(exp[i])
exp.sort()
ans = 0
for i in range(2,n+1):
    ans += sum(exp[0:i])
print(ans)

from itertools import *

n = input()
exp = []
pe=[]
for i in range(len(n)):
    exp.append(n[i])
    pe.append(n[i])
exp.sort()
res = [i for i in range(len(exp))]
count = 0
for elemt in permutations(exp):
    if list(elemt) == pe:
        print(count)
        break
    count += 1

#状态计算的定义:
#dp[i+1][j+1]=dp[i][j+1]表示s的前i个字符包含了t的前j个字符
#dp[i+1][j+1]=dp[i][j]表示s[i]和t[j]相等
#dp[i+1][j+1]=dp[i][j]+1表示不相同进行一步修改
s = input()
t = input()
dp = [[9999] * (len(t) + 1) for i in range(len(s) + 1)]#创建一个len(s)+1行,len(t)+1列的矩阵,因为要求最小值所以把矩阵的值都取最大
for i in range(len(s) + 1):
    dp[i][0] = 0#dp[i][0]代表s的前i个字符包含t的前0个字符的操作数,t的前0个字符即空串,因为空串是任意串的子串,不需要进行更改操作,所以操作数为0
#f[0][j]代表s的前0个字符包含t的前j个字符的操作数,因为s的前0个字符即空串,空串无论怎么修改任然是空串,因此应该赋值为正无穷,但此前我们已经对所有的dp 赋值了正无穷,因此此步可省略
for i in range(len(s)):
    for j in range(len(t)):
        if s[i] == t[j]:#s[i]等于t[j],则dp[i+1][j+1]等于dp[i][j],因为不需要进行任何操作
            dp[i+1][j+1] = dp[i][j]
        else:#s[i]不等于t[j],则dp[i+1][j+1]等于dp[i][j]+1和dp[i][j+1]中的较小值,表示替换或删除操作的最小操作数。
            dp[i+1][j+1] = min(dp[i][j]+1, dp[i][j+1])
print(dp[-1][-1])

初始化dp和dp状态定义很重要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值