快捷搜索: 王者荣耀 脱发

十届蓝桥杯大赛PythonB组--决赛

A递增序列

思路:看到就想起了N皇后问题,感觉有点麻烦 暴力:先统计同一行递增的数量,再统计同一列,最后统计斜对角 发现老是读不懂蓝桥杯的题意,而且就给一个样例,斜对角包括到右下(右下字符比较顺序固定就是从上到下),和到右上(顺序不一样,因为题干给了从左到右和从上到下,发现只要是两个字符不相等,就计数),

B:平方拆分

暴力:三个数字按递增的顺序 太难了,感觉会超时 后来发现题目没有规定数字的个数,下面的代码是看了别人的思路,采用回溯的思想
#回溯,dp[i]=(i-1)^2
dp=[1,4,9,16,25,36,49,64,81,100,121,169,196,225,256,289,324,361,400,441,484,529,576,625,676,729,784,841,900,961,1024,1089,1156,1225,1296,1369,1444,1521,1600,1681,1764,1849,1936,2025,2116]
lenn=45
ans = []#存放所有方法
path=[]#存放一个方法
def backtracking(dp,begin):#有个begin参数,使数字不重复
    if sum(path)==2019:#成立
        ans.append(sum)
        return
    if sum(path)>2019:#当一条路径的和大于2019说明这条路径不成立
        return
    #每个数不同,我们按递增的顺序
    for i in range(begin,lenn):
        path.append(dp[i])
        backtracking(dp,i+1)
        path.pop()
backtracking(dp,0)
print(len(ans))

C:切割

经验分享 程序员 微信小程序 职场和发展