美团2020.8.15笔试第四题讨论

题目:车辆调度
使用三维dp,dp[a][b][k] 表示A、B两地分别需要a、b辆车,有k辆车可供调度时的最优解。
状态转移方程:
dp[a][b][k] = max(dp[a][b][k-1],
dp[a-1][b][k-1]+profits[k][0],
dp[a][b-1][k-1]+profits[k][1])
自测样例:
5 2 2
4 2
3 3
5 4
5 3
1 5
欢迎交流!
#include <iostream>
#include "bits/stdc++.h"

using namespace std;

int main(){
    int n=5, a=2, b=2;
    vector<pair<int, int>> nums(n);
    nums[0] = {4,2}; nums[1] = {3,3}; nums[2] = {5,4}; nums[3] = {5,3}; nums[4]={1,5};
    vector<vector<vector<int>>> dp(a+1, vector<vector<int>>(b+1, vector<int>(n+1, 0)));
       // initialize
        for(int k=1; k<=n; k++){ 
        dp[1][0][k] = max(dp[1][0][k-1], nums[k-1].first);
        dp[0][1][k] = max(dp[0][1][k-1], nums[k-1].second);
    }
        // programming
    for(int k=1; k<=n; k++)
        for(int i=1; i<=a; i++)
            for(int j=1; j<=b; j++){
                // if(k>=i+j){
                    dp[i][j][k] = dp[i][j][k-1];
                    dp[i][j][k] = max(dp[i][j][k], dp[i-1][j][k-1]+nums[k-1].first);
                    dp[i][j][k] = max(dp[i][j][k], dp[i][j-1][k-1]+nums[k-1].second);
                // }
            }
    cout<<dp[a][b][n]<<endl;
}
    

#笔试题目##美团#
全部评论
三维数组不优化空间会超,循环条件不优化时间会超 我发了AC解法https://www.nowcoder.com/discuss/478800?source_id=profile_create&channel=666
2
送花
回复
分享
发布于 2020-08-16 11:54

相关推荐

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