解题思路:
递归。
注意事项:
参考代码:
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语言代码)浏览:742 |
【偶数求和】 (C语言代码)浏览:639 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1143 |
用筛法求之N内的素数。 (C语言代码)浏览:646 |
剪刀石头布 (C语言代码)浏览:748 |
1126题解浏览:578 |
整除问题 (C语言代码)浏览:518 |
上车人数 (C语言代码)浏览:710 |
班级人数 (C语言代码)浏览:920 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:479 |