Codeforces - 1114B. Yet Another Array Partitioning Task(贪心 + 索引)

发布于 2024-03-29 19:31:10 字数 2475 浏览 22 评论 0

题目

给你 n、m、kn 个元素的数组,要你将数组划分成 k 个部分,每个部分至少 m 个元素,每个部分取最大的 m

元素,要你求使得 k 个部分的每一个部分的 m 个元素组成的总和最大的划分。

解析

很好的贪心题:

  • 首先,我们至少需要取 m * k 个元素,且数组中最大的 m * k 个元素就是最大的 sum ,因为不管怎么样,我们都能取得到这 m * k 个元素,明白这一点很重要;
  • 知道了上面就很好做了,先记录一个每个元素在原来数组中对应的下标,然后对原来数组按照值降序排序,则前 m * k 个的和就是答案;
  • 然后用一个 boolean 数组记录哪些元素使用了,然后遍历一遍原来的数组,构造出来即可,具体看代码;

代码:

import java.io.*;
import java.util.*;

public class Main {

    static class Pair{
        int id;
        int val;
        Pair(int id, int val){
            this.id = id;
            this.val = val;
        }
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(new BufferedInputStream(System.in));
        PrintStream out = System.out;
        int n = in.nextInt(), m = in.nextInt(), k = in.nextInt();
        int[] arr = new int[n];
        Pair[] pairs = new Pair[n];
        for(int i = 0; i < n; i++){
            arr[i] = in.nextInt();
            pairs[i] = new Pair(i, arr[i]);
        }
        Arrays.sort(pairs, (o1, o2) -> o2.val - o1.val);
        boolean[] toUse = new boolean[n];
        long sum = 0;
        for(int i = 0; i < m * k; i++){ // m * k <= n
            toUse[pairs[i].id] = true;
            sum += pairs[i].val;
        }
        out.println(sum); // max sum

        int cnt = 0, found = 0, pos = 0;
        int[] rid = new int[k - 1];
        for(int i = 0; i < n; i++){
            cnt += toUse[i] ? 1 : 0;
            if(cnt == m){
                rid[pos++] = i + 1;
                cnt = 0;
                found++;
                if(found == k - 1) break;
            }
        }
        for(int i = 0; i < k - 1; i++)
            out.print(rid[i] + " ");
        out.println();
    }
}

题目链接

https://codeforces.com/problemset/problem/1114/B

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

凶凌

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

我们的影子

文章 0 评论 0

素年丶

文章 0 评论 0

南笙

文章 0 评论 0

18215568913

文章 0 评论 0

qq_xk7Ean

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文