zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    了解委托(Delegate)
    C#中事件的一些总结
    Devexpress Xtrareport 并排报表
    Xtrareport 交叉报表
    Xtrareport 多栏报表
    Xtrareport 报表的一些属性及控件
    UI前端开发都是做什么的以及html、css、php、js等究竟是神马关系
    url,href,src之间的区别
    join()的用法
    爬取百度百科
  • 原文地址:https://www.cnblogs.com/wdt1/p/14521381.html
Copyright © 2011-2022 走看看