zoukankan      html  css  js  c++  java
  • [CF3B] Lorry

    [CF3B] Lorry

    Description

    有一辆载重量为 v 的货车,准备运送两种物品。物品 A 的重量为 1,物体 B 的重量为 2,每个物品都有一个价值。求货车可以运送的物品的最大价值。

    Solution

    枚举运多少个 B 物品,剩下的排序即可

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    const int N = 1000005;
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        int n, v;
        cin >> n >> v;
    
        vector<pair<int, int>> a, b;
        for (int i = 1; i <= n; i++)
        {
            int t, p;
            cin >> t >> p;
            if (t == 1)
                a.push_back({p, i});
            else
                b.push_back({p, i});
        }
    
        sort(a.begin(), a.end());
        reverse(a.begin(), a.end());
        sort(b.begin(), b.end());
        reverse(b.begin(), b.end());
    
        vector<int> sa(n + 2), sb(n + 2);
        for (int i = 1; i <= a.size(); i++)
            sa[i] = sa[i - 1] + a[i - 1].first;
        for (int i = 1; i <= b.size(); i++)
            sb[i] = sb[i - 1] + b[i - 1].first;
        for (int i = a.size() + 1; i <= n; i++)
            sa[i] = sa[i - 1];
        for (int i = b.size() + 1; i <= n; i++)
            sb[i] = sb[i - 1];
    
        int ans = 0, ans_a = 0, ans_b = 0;
        for (int i = 0; i <= n; i++)
        {
            int w_b = 2 * i;
            int v_b = sb[i];
            int w_a = v - w_b;
            if (i > b.size())
                continue;
            if (w_a < 0)
                break;
            if (w_a > a.size())
                w_a = a.size();
            int v_a = sa[w_a];
            ans = max(ans, v_a + v_b);
            if (ans == v_a + v_b)
                ans_a = w_a, ans_b = i;
        }
    
        cout << ans << endl;
        for (int i = 1; i <= ans_a; i++)
            cout << a[i - 1].second << " ";
        for (int i = 1; i <= ans_b; i++)
            cout << b[i - 1].second << " ";
    }
    
  • 相关阅读:
    word2vec层次化softmax理解
    python动态加载模块,并获取模块中的类与方法(类似反射)
    用Python装饰器给函数自动加上try except
    3D打印第二弹:狗牌
    【高等代数】06
    【高等代数】05
    沙箱-guacamole
    关于写博客的一点思考
    二阶段目标检测总结
    Waymo object detect 2D解决方案论文拓展
  • 原文地址:https://www.cnblogs.com/mollnn/p/14403886.html
Copyright © 2011-2022 走看看