美团算法笔试

第一题,工作安排

第一周不能选复杂的任务

#include<bits/stdc++.h>

using namespace std;


int main()
{
    int N = 0;
    cin >> N;

    if (N == 0)
        cout << 0 << endl;

    vector<pair<float, float>> vec(N);
    vector<float> dp(N, 0);
    for (int i = 0; i < N; ++i)
    {
        float l = 0., h = 0.;
        cin >> l >> h;
        vec[i] = make_pair(l, h);
    }

    for (int i = 0; i < int(vec.size()); ++i)
    {
        float v = 0;
        if ((i - 2) >= 0)
            v = dp[i - 2];

        if (i == 0)
            dp[i] = vec[i].first;
        else
            dp[i] = max(vec[i].first + dp[i - 1], vec[i].second + v);
    }

    cout << dp[N - 1] << endl;

    return 0;
}


#美团##笔试题目#
全部评论
第一题A了嘛 dp只能A27
点赞
送花
回复
分享
发布于 2019-09-18 17:06
然而A了45求解答
点赞
送花
回复
分享
发布于 2019-09-18 17:06
滴滴
校招火热招聘中
官网直投
#include <vector> #include <iostream> #include <algorithm> int main() { int N; std::cin >> N; std::vector<std::vector><float>> input(N, std::vector<float>(2)); for (int i = 0; i < N; i++) { float l, h; std::cin >> l >> h; input[i][0] = l; input[i][1] = h; } if (N == 0) { std::cout << "0"; return 0; } std::vector<float> dp(N + 1, 0); dp[1] = input[0][0]; for (int i = 2; i <= N; i++) { dp[i] = std::max(input[i - 1][0] + dp[i - 1], input[i - 1][1] + dp[i - 2]); } std::cout << dp[N]; return 0; }</float></float></float></std::vector></algorithm></iostream></vector>
点赞
送花
回复
分享
发布于 2019-09-18 17:13
点赞
送花
回复
分享
发布于 2019-09-18 17:14
def solution(task, n):     dp = [0.0]*(n+1)     if n == 0:         return 0.0     if n == 1:         return task[0][0]     dp[1] = task[0][0]     for i in range(2, n+1):         dp[i] = max(dp[i-1]+task[i-1][0], dp[i-2]+task[i-1][1])     return dp[-1] if __name__ == '__main__':     n = int(input())     task = []     for i in range(n):         task.append(list(map(float, input().split())))     result = solution(task, n)     print(result)
点赞
送花
回复
分享
发布于 2019-09-18 17:22

相关推荐

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