携程笔试5.7 图像识别方向 85 81 67

又一次全没A,请帅气的大佬帮忙指点~~  没有保存题目,做过的大佬交流吧

第一题旅游区 85
n = int(input())
m = []
for _ in range(n):
    m.append(list(map(int,input().split())))
# n = 4
# m = [[0, 6, 0, 0, 0], [5, 8, 7, 1, 0], [0, 9, 0, 1, 0], [0, 1, 0, 0, 1]]

visited = [[False]*len(m[0]) for _ in range(n)]

d = [(-1,0),(1,0),(0,1),(0,-1)]

def helper(i,j,m,visited,score):
    visited[i][j] = True
    if m[i][j] == 0 :
        return score
    r = score
    for dx,dy in d:
        if 0<=i+dx<n and 0<=j+dy<len(m[0]) and m[i+dx][j+dy] != 0 and not visited[i+dx][j+dy]:
            r = max(helper(i+dx,j+dy,m,visited,score+m[i+dx][j+dy]),r)
    return r


res = 0
for i in range(n):
    for j in range(len(m[0])):
        visited = [[False for _ in range(len(m[0]))] for _ in range(n)]
        res = max(res,helper(i,j,m,visited,m[i][j]))

print(res)


第二题SOHO健身 81
int climb(int n) {
	if(n<0){
        return -1;
    }
    if(n==0){
        return 1;
    }
    int dp[n+1];
    dp[0] = 1;
    dp[1] = 1;
    int i;
    for(i=2;i<=n;i++){
        dp[i] = dp[i-1] + dp[i-2];
    }
    int res;
    res = dp[n];
    for(i=0;i<=n-3;i++){
        res += dp[i]*dp[n-3-i];
    }
    return res;
}
/******************************结束写代码******************************/


int main() {
    int res;

    int _n;
    scanf("%d", &_n);


    res = climb(_n);
    printf("%d\n", res);

    return 0;

}


第三题宝石 67 时间超了

k = int(input())
n = int(input())
w = list(map(int,input().split()))
v = list(map(int,input().split())) # k=5
# n=3
# w=[3, 2, 2]
# v=[30, 10, 10] w.insert(0,0)
v.insert(0,0)
from copy import deepcopy
dp = [[0] * (k+1) for _ in range(2)]
res = [[[] for _ in range(k+1)] for _ in range(2)]
for i in range(1,n+1):
    for j in range(k+1):
        if i % 2 == 1:
            if j < w[i]:
                dp[1][j] = dp[0][j]
                res[1][j] = deepcopy(res[0][j])
            else:
                if dp[0][j-w[i]]+v[i] > dp[0][j]:
                    dp[1][j] = dp[0][j-w[i]]+v[i]
                    res[1][j] = deepcopy(res[0][j-w[i]])
                    res[1][j].append(i)
                else:
                    dp[1][j] = dp[0][j]
                    res[1][j] = deepcopy(res[0][j])
        else:
            if j < w[i]:
                dp[0][j] = dp[1][j]
                res[0][j] = deepcopy(res[1][j])
            else:
                if dp[1][j - w[i]] + v[i] > dp[1][j]:
                    dp[0][j] = dp[1][j - w[i]] + v[i]
                    res[0][j] = deepcopy(res[1][j - w[i]])
                    res[0][j].append(i)
                else:
                    dp[0][j] = dp[1][j]
                    res[0][j] = deepcopy(res[1][j])
if n % 2 == 1:
    r = res[-1][-1]
else:
    r = res[0][-1]
# r = res[-1][-1]
r.sort()
r.reverse()
for i in r:
    print(i)



#携程春招##携程##笔试题目#
全部评论
第二道题int改为long
点赞 回复
分享
发布于 2020-05-07 12:21
我第一题86,第三题50,时间也是超,还有一题必须java或者c,***不会
点赞 回复
分享
发布于 2020-05-07 22:37
联易融
校招火热招聘中
官网直投

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务