3.21 最右笔试

1.最大连续子序和,但要记录起始位置
if __name__ == '__main__':
    
    ary = list(map(float, input().split()))
    dp = [0] * len(ary)
    dp[0] = ary[0]
    start = [0]
    for i in range(1, len(ary)):
        if dp[i-1] + ary[i] >= ary[i]:
            dp[i] = dp[i-1] + ary[i]
        else:
            dp[i] = ary[i]
            start.append(i)
    
    res = max(dp)
    print(start[-1], dp.index(res)+1, res) 
    


    
2.机器人走格子,dfs
def count_sum(i, j):

    res = 0
    for i in str(i):
        res += int(i)
    for i in str(j):
        res += int(j)
    return res

def get_neigh(i, j, m, n):
    neighs = []
    if i < n-1:
        neighs.append([i+1, j])
    if i > 0:
        neighs.append([i-1, j])
    if j < m-1:
        neighs.append([i, j+1])
    if j > 0:
        neighs.append([i, j-1])
    return neighs

def dfs(p, i, j, k, res, m, n):
    for ne in get_neigh(i, j, m, n):
        if p[ne[0]][ne[1]] and count_sum(ne[0], ne[1]) <= k:
            p[ne[0]][ne[1]] = False
            res[0] += 1
            dfs(p, ne[0], ne[1], k, res, m, n)

if __name__ == '__main__':
    k, m, n = tuple(map(int, input().split()))
    p = [[True for _ in range(m)] for _ in range(n)]
    res = [0]
    for i in range(n):
        for j in range(m):
            if p[i][j] and count_sum(i, j) <= k:
                p[i][j] = False
                res[0] += 1
                dfs(p, i, j, k, res, m, n)
    
    print(res[0])



#最右##笔试题目#
全部评论
同做
点赞 回复 分享
发布于 2020-03-21 18:32
剑指原题?
点赞 回复 分享
发布于 2020-03-21 18:14

相关推荐

真烦好烦真烦:牛友太有实力了
点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
点赞 评论 收藏
分享
评论
4
10
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务