十届蓝桥杯大赛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:切割
上一篇:
IDEA上Java项目控制台中文乱码