占个坑,等结束发题解。 另外求算法岗内推,救救孩子。 第一题 动态规划,可以压到1维。按照代价值来做DP,同时记录收益值,当代价值相同的时候取收益最大的那个。 """3 41 6 3  208 4 2 21 1 3 11 2 2 22 2 2 22 3 2 2"""def solve(row, col, costs, values):    dp1 = [0] * col    dp2 = [0] * col    for j in range(col):        if j == 0:            dp1[j] = costs[0][j]            dp2[j] = values[0][j]            continue        dp1[j] = dp1[j - 1] + costs[0][j]        dp2[j] = dp2[j - 1] + values[0][j]    for i in range(1, row):        cdp1 = [0] * col        cdp2 = [0] * col        for j in range(col):            if j == 0:                cdp1[j] = costs[i][j] + dp1[j]                cdp2[j] = values[i][j] + dp2[j]                continue            if cdp1[j - 1] < dp1[j]:                cdp1[j] = cdp1[j - 1] + costs[i][j]                cdp2[j] = cdp2[j - 1] + values[i][j]            elif cdp1[j - 1] > dp1[j]:                cdp1[j] = dp1[j] + costs[i][j]                cdp2[j] = dp2[j] + values[i][j]            else:                cdp1[j] = cdp1[j - 1] + costs[i][j]                cdp2[j] = values[i][j] + max(cdp2[j - 1], dp2[j])        dp1 = cdp1[:]        dp2 = cdp2[:]    print("{} {}".format(dp1[-1], dp2[-1]))if __name__ == '__main__':    row, col = map(int, input().split())    costs = []    values = []    for i in range(row):        costs.append(list(map(int, input().split())))    for i in range(row):        values.append(list(map(int, input().split())))    solve(row, col, costs, values) 第二题 禁用了Python,题目的大意是制定一个字母,然后指定次数和每次变换跳的步数,求最终字母编程多少。 给的次数和每次跳的步数范围很大。利用: 防止溢出就可以。 c++ 字符操作不太会写,用的强制类型转换。 #include <iostream>using namespace std;int main(){    int MOD= 26;    int _;    cin >> _;    for(int i =0; i < _; ++i){        char a;        long long int n, k;        cin >> a >> n >> k;        long long int ret = ((n % MOD) * (k % MOD)) % MOD;        long long int out = ret + a;        if(out > 'z'){            out = out - 'z' + 'a' - 1;        }        cout << char(out) << endl;    }} 第三题 BFS。N个点 N-1个边,因此是一棵树,直接BFS就可以 from collections import defaultdict, dequedef solve(N, Q, graph, samples):    def bfs(s, e, c):        que = deque()        que.append([s, 0])        visited = set()        visited.add(s)        while que:            node, cnt = que.popleft()            for _node in graph[node]:                if _node not in visited:                    visited.add(_node)                    distance = graph[node][_node]                    times = distance // c                    ccnt = cnt                    if times == 0:                        ccnt = cnt + 1                    elif times * c == distance:                        ccnt = cnt + times                    else:                        ccnt = cnt + times + 1                    if _node == e:                        return ccnt + 1                    que.append([_node, ccnt])    for [s, e, c] in samples:        ret = bfs(s, e, c)        print(ret)if __name__ == '__main__':    N, Q = map(int, input().split())    graph = defaultdict(dict)    for i in range(N - 1):        u, v, d = map(int, input().split())        graph[u][v] = d        graph[v][u] = d    samples = []    for i in range(Q):        samples.append(list(map(int, input().split())))    solve(N, Q, graph, samples)
点赞 4
评论 3
全部评论

相关推荐

Java大菜狗:纯纯招黑奴,一天还不到两百那么多要求,还不迟到早退,以为啥啊,给一点工资做一堆活,还以不拖欠员工工资为荣,这是什么值得骄傲的事情吗,纯纯***公司
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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