阿里笔试4.8

阿里笔试4.8号

一道ac一道15%

data = list(map(int,input().split()))
T = data[0]

for _ in range(T):
    [n,m,a,b] = list(map(int,input().split()))
    if b==1:
        print(min(n//a,m))
        continue
    if n<a:
        print(0)
        continue
    elif n==a:
        print(min(b,m))
        continue
    if n*b>=m*a:
        print(m)
    else:
        print(n*b//a)

运气AC,推了一下,某些状态下所有木偶都能干掉,然后排除一些特殊情况

def solution(matrix, k, n):
    directions = [[0,1],[1,0],[0,-1],[-1,0]]
    max_re = [0]
    def dfs(i, j, re):
        for dire in directions:
            for step in range(1,k+1):
                new_i, new_j = i+step*dire[0],j+step*dire[1]
                if 0<=new_i<n and 0<=new_j<n:
                    if matrix[new_i][new_j]>matrix[i][j]:
                        max_re[0] = max(re+matrix[new_i][new_j],max_re[0])
                        dfs(new_i, new_j, re+matrix[new_i][new_j])
                else:
                    break
    dfs(0,0,matrix[0][0])
    return max_re[0]

data = list(map(int,input().split()))
T = data[0]

for _ in range(T):
    [n, k] = list(map(int,input().split()))
    matrix = []
    for i in range(n):
        matrix.append(list(map(int,input().split())))
    print(solution(matrix,k,n))

15%,显示的超时,没有思路了,可能python加递归就是这样。555

def solution(matrix, k, n):
    directions = [[0,1],[1,0],[0,-1],[-1,0]]
    dp = [[-1]*n for _ in range(n)]
    def dfs(i, j):
        flag = 0
        re = matrix[i][j]
        temp_max = matrix[i][j]
        for dire in directions:
            for step in range(1,k+1):
                new_i, new_j = i+step*dire[0],j+step*dire[1]
                if 0<=new_i<n and 0<=new_j<n:
                    if matrix[new_i][new_j]>matrix[i][j]:
                        if dp[new_i][new_j]==-1:
                            temp_ans = re + dfs(new_i, new_j)
                        else:
                            temp_ans = re + dp[new_i][new_j]
                        temp_max = max(temp_max, temp_ans)
                else:
                    break
        dp[i][j] = temp_max
        return temp_max
    dfs(0,0)
    print(dp)
    return dp[0][0]

这个应该就能AC了吧,加上dp存储一些已经确定过的点,idea是别人的

#阿里笔试2020##阿里巴巴##笔试题目#
全部评论
大佬大佬,攻击范围的含义把我绕进去了
点赞 回复 分享
发布于 2020-04-08 17:14
大佬能把第一题题目简单描述一下么?
点赞 回复 分享
发布于 2020-04-08 17:16
🙃第一题我证明了好久这个,发现证不出来就没管了,没想到这么简单,好后悔啊,大家都AC的题我爆0
点赞 回复 分享
发布于 2020-04-08 17:36

相关推荐

10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
1 3 评论
分享
牛客网
牛客企业服务