• b_lc_心算挑战(排序+贪心)


    选手从 N 张卡牌中选出 cnt 张卡牌,若这 cnt 张卡牌数字总和为偶数,则选手成绩「有效」且得分为 cnt 张卡牌数字总和。 请帮参赛选手计算最大的有效得分 n,cnt<1e5

    思路:贪心就是指尽可能拿大的数;奇数肯定只能不拿/拿两个,偶数随便拿大的就行

    class Solution {
    public:
        int maxmiumScore(vector<int>& A, int cnt) {
            vector<int> odd = {0}, even = {0};
    
            for (const auto &item : A) {
                if (item % 2 == 0) {
                    even.push_back(item);
                } else {
                    odd.push_back(item);
                }
            }
            sort(even.begin() + 1, even.end(), greater<int>());
            sort(odd.begin() + 1, odd.end(), greater<int>());
    
            for (int i = 1; i < odd.size(); ++i) {
                odd[i] += odd[i-1];
            }
            for (int i = 1; i < even.size(); ++i) {
                even[i] += even[i-1];
            }
            int ans = 0;
    
            for (int i = 0; i <= cnt; i += 2) {
                int oddSize = i, evenSize = cnt - i;
                if (oddSize >= odd.size() || evenSize >= even.size()) {
                    continue;
                }
                ans = max(ans, odd[oddSize] + even[evenSize]);
            }
            return ans;
        }
    };
    
  • 相关阅读:
    函数及其表示
    集合等离散数学内容
    求和
    分式·新方法
    弹力、重力、摩擦力
    洛谷 P1357 花园
    浮力
    因式分解·新方法
    压强
    洛谷 P2051 [AHOI2009]中国象棋
  • 原文地址:https://www.cnblogs.com/wdt1/p/15256801.html
Copyright © 2020-2023  润新知