• UVALive-6434(思维)


    题目链接:https://vjudge.net/problem/UVALive-6434

    题意:给你一串n个数字,要求你将这串数字分成m组,使得分组后他们的消耗和最小。其中消耗是这样定义的:每一组的消耗等于这组数据中最大数与最小数的差值。

    思路:不难想到,两个数的差值要尽可能小的话,首先要对这组数进行排序,那么分组情况一定是在这组排序数中间进行切断分割。那么剩下的一个问题就是怎么去切割分段,根据排序后得到的每两个相邻数之间的差值,选择差值最大的m-1个数字对之间进行分割就好了。

    代码:

     1 #include<stdio.h>
     2 #include<algorithm>
     3 #include<string.h>
     4 int main()
     5 {
     6     int t;
     7     scanf("%d", &t);
     8     int ca = 1;
     9     int a[110];
    10     int num[110];
    11     while(t--)
    12     {
    13         memset(a, 0, sizeof(a));
    14         memset(num, 0, sizeof(num));
    15         int ans = 0;
    16         int n, m;
    17         scanf("%d%d", &n, &m);
    18         for(int i = 0; i < n; i++)
    19         {
    20             scanf("%d", &a[i]);
    21         }
    22         std::sort(a, a + n);
    23         for(int i = 0; i < n - 1; i++)
    24         {
    25             num[i] = a[i + 1] - a[i];
    26             ans += num[i];
    27         }
    28         std::sort(num, num + n - 1);
    29         for(int i = 0; i < m - 1; i++)
    30         {
    31             ans -= num[n - 2 - i];
    32         }
    33         printf("Case #%d: %d
    ", ca, ans);
    34         ca++;
    35     }
    36     return 0;
    37 }
  • 相关阅读:
    pickle模块
    json模块
    sys模块的介绍
    Java中char和String的处理问题
    javaweb学习 基础(三)Cookie Session
    javaweb学习 基础(二)httpservlet
    javaweb学习 基础(一)servlet day09-day10
    java学习 网络编程 tcp
    java学习 网络编程 ip,udp
    了解数据仓库
  • 原文地址:https://www.cnblogs.com/friend-A/p/9381985.html
Copyright © 2020-2023  润新知