解题思路:
递归。
注意事项:
参考代码:
def dfs(x,cnt,now): global n,m,A,vis,ans if cnt == m: if now > ans: ans = now return if n-x < 2*(m-cnt)-1: #重要优化 return if x == 0: if (not vis[x]) and (not vis[x+1]) and (not vis[n-1]): vis[x] = 1 for i in range(x+1,n+1): dfs(i,cnt+1,now+A[x]) vis[x] = 0 else: for i in range(x+1,n+1): dfs(i,cnt,now) elif x == n-1: if (not vis[x]) and (not vis[x-1]) and (not vis[0]): vis[x] = 1 for i in range(x+1,n+1): dfs(i,cnt+1,now+A[x]) vis[x] = 0 else: for i in range(x+1,n+1): dfs(i,cnt,now) else: if (not vis[x]) and (not vis[x-1]) and (not vis[x+1]): vis[x] = 1 for i in range(x+1,n+1): dfs(i,cnt+1,now+A[x]) vis[x] = 0 else: for i in range(x+1,n+1): dfs(i,cnt,now) if __name__ == '__main__': n,m = map(int,input().strip().split()) A = [int(i) for i in input().strip().split()] vis = [0 for i in range(n)] ans = 0 if n < 2*m-1: print('Error!') else: for i in range(n-(2*m-2)): dfs(i,0,0) print(ans)
0.0分
1 人评分
C语言训练-素数问题 (C语言代码)浏览:1660 |
【偶数求和】 (C语言代码)浏览:557 |
WU-整数平均值 (C++代码)浏览:1244 |
三角形 (C++代码)递归(存在大量重复计算,容易出现时间超限)浏览:781 |
WU-C语言程序设计教程(第三版)课后习题12.1 (C++代码)浏览:940 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:596 |
矩阵乘方 (C语言代码)浏览:1030 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:682 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:687 |
The 3n + 1 problem (C语言代码)浏览:505 |