解题思路:
递归。
注意事项:
参考代码:
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语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:2081 |
C语言训练-列出最简真分数序列* (C语言代码)浏览:619 |
IP判断 (C语言代码)浏览:763 |
简单的a+b (C语言代码)浏览:577 |
The 3n + 1 problem (C语言代码)浏览:553 |
Cylinder (C语言描述,蓝桥杯)浏览:1247 |
图形输出 (C语言代码)浏览:945 |
C语言程序设计教程(第三版)课后习题12.3 (C语言代码)浏览:548 |
1231题解(注意理解“输入多个测试实例”)浏览:788 |
小O的图案 (C语言代码)浏览:915 |