zoukankan      html  css  js  c++  java
  • 区间覆盖问题-贪心

    题目:

    i表示x坐标轴上坐标为(i-1,i),长度为1的区间,给出n个这样的区间,要求画出m条线段覆盖住所有的区间,每条线段可以任意长,要求所有的线段长度和最小

    第一行输入n和m,其中1<=n<=200,1<=m<=50

    第二行输入n个坐标

    思路:

    我先用一条线段从起点拉到终点,将所有的区间都覆盖到,题目要求可以用m段并且和要最小,那我就将这一条线段从中间剪成m段,即剪m-1次

    如果要想达到和最小的目的,那我每次剪开的地方一定要是最长的,我可以将所有空白的区间按长度递减排序,取前m-1个剪掉即可。

    上代码:

     1 #include<iostream>
     2 #include<vector>
     3 #include<algorithm>
     4 #define MAX 205
     5 using namespace std;
     6 //此结构体用来记录空白段
     7 struct Node {
     8     int b;//起始坐标
     9     int e;//结束坐标
    10     int len;//空白段长度
    11     bool operator<(const Node &s)const {
    12         return len > s.len;//长度按递减排序
    13     }
    14 };
    15 Node node[MAX];
    16 int k = 0;
    17 int main() {
    18     int n;
    19     int m;
    20     int a[MAX];
    21     cin >> n >> m;
    22     vector<int> v;
    23     for (int i = 0; i < n; i++) {
    24         cin >> a[i];
    25         v.push_back(a[i]);
    26     }
    27     sort(v.begin(), v.end());
    28     vector<int>::iterator it;
    29     for (it = v.begin(); it != v.end()-1; it++) {
    30         node[k].b = (*it);
    31         node[k].e = *(it + 1)-1;
    32         node[k].len = node[k].e - node[k].b;
    33         k++;
    34     }
    35     int sum = 0;
    36     sum = node[k - 1].e + 1 - node[0].b + 1;
    37     sort(node, node + k);
    38     for (int i = 0; i < k; i++) {
    39         cout << node[i].b<<" "<<node[i].e<<" "<<node[i].len<<endl;
    40     }
    41     for (int i = 0; i < m - 1; i++) {
    42         sum -= node[i].len;
    43     }
    44     cout << sum;
    45 
    46     return 0;
    47 }
  • 相关阅读:
    linux(十一)之初始化文件
    linux(十)配置ssh免密登录实现
    linux(九)之网络基础
    linux(八)linux系统中查找文件二
    oracle 重建分区索引
    java.io.IOException: java.sql.SQLException: ORA-01502: index 'BTO.PK_xxxxx' or partition of such index is in unusable state
    oracle count 大表
    shell for if
    oracle 导出表
    linux date
  • 原文地址:https://www.cnblogs.com/program-ai-cv-ml-se-fighting/p/11924405.html
Copyright © 2011-2022 走看看