• b_mt_小团的车辆调度(需优化的01背包)


    某个时刻A和B两地都向该公司提交了租车的订单,分别需要a和b辆汽车。通过北斗定位,可以得到所有车辆的位置,小团分别计算了每辆车前往A地和B地完成订单的利润。想让公司的利润最大化了。请你选择a辆车完成A地的任务,选择b辆车完成B地的任务。使得公司获利最大,每辆车最多只能完成一地的任务。
    输入
    第一行包含三个整数n,a,b,分别表示公司的车辆数量和A,B两地订单所需数量,保证a+b<=n。(1<=n<=2000)
    接下来有n行,每行两个正整数x,y,分别表示该车完成A地任务的利润和B地任务的利润。

    思路:可以省去第一维

    #include<bits/stdc++.h>
    using namespace std;
    int main() {
        std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int n,a,b; cin>>n>>a>>b; //a,b 表示A,B两地订单所需数量
        int f[a+5][b+5]; //f[i][j]表示a地排除i辆车,b地派出j辆车时的最大收益 
        memset(f,0,sizeof f);
        for (int i=1; i<=n; i++) {
            int x,y; cin>>x>>y;  //x,y,分别表示该车完成A地任务的利润和B地任务的利润
            for (int j=min(i,a); j; j--) {
                for (int k=min(i-j,b); k; k--) {
                    f[j][k]=max(f[j][k], max({f[j-1][k]+x, f[j][k-1]+y, f[i-1][j-1]}));
                }
            }
        }
        cout<<f[a][b];
        return 0;
    }
    
  • 相关阅读:
    区间dp体会
    P1083借教室 noip提高组复赛2012
    P2678跳石头体会 noip2015提高组
    tarjan求LCA的体会
    P1006 传纸条
    P1140 相似基因 详解
    UVA1025 城市里的间谍 A Spy in the Metro 题解
    DAG上的动规嵌套矩形问题(含思考题)
    洛谷P1030c++递归求解先序排列
    Test 2019.7.22
  • 原文地址:https://www.cnblogs.com/wdt1/p/14521381.html
Copyright © 2020-2023  润新知