解题思路:

递归。


注意事项:

参考代码:

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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论