贪心2合集

本文介绍了多个青藤OJ上的贪心算法问题,包括线段选择、喷水装置调度、加工生产调度、智力大冲浪优化及数列极差、数列分段等,通过思路解析和代码展示,阐述了贪心算法在解决实际问题中的应用。
摘要由CSDN通过智能技术生成

贪心2合集

青藤oj #30007. 「一本通 1.1 练习 3」线段

题目描述

数轴上有 n条线段,选取其中 k条线段使得这 k条线段两两没有重合部分,问k 最大为多少。

输入格式

第一行为一个正整数n;

在接下来的n
行中,每行有 2个数ai,bi ,描述每条线段。

输出格式

输出一个整数,为k 的最大值。

思路

e…这题就是活动安排,该一下变量大小就AC了。。。

代码

#include <bits/stdc++.h>
using namespace std;
int beginn[1000001], endd[10000001];
int n, sum = 0;
void qsort(int, int);
void slove();
int main() {
   
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
   
        scanf("%d%d", &beginn[i], &endd[i]);
    }
    qsort(1, n);
    slove();
    return 0;
}
void qsort(int x, int y) {
   
    int l = x, r = y, m = endd[(x + y) / 2];
    while (l <= r) {
   
        while (endd[l] < m) l++;
        while (endd[r] > m) r--;
        if (l <= r) {
   
            int m = endd[l];
            endd[l] = endd[r];
            endd[r] = m;
            int n = beginn[l];
            beginn[l] = beginn[r];
            beginn[r] = n;
            l++;
            r--;
        }
    }
    if (l < y)
        qsort(l, y);
    if (r > x)
        qsort(x, r);
}
void slove() {
   
    int lastt = -1;
    for (int i = 1; i <= n; i++) {
   
        if (beginn[i] >= lastt) {
   
            sum++;
            lastt = endd[i];
        }
    }
    printf("%d", sum);
}

青藤oj #30002. 「一本通 1.1 例 3」喷水装置

题目描述

长L米,宽W米的草坪里装有 n个浇灌喷头。每个喷头都装在草坪中心线上(离两边各w/2米)。我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围。
请问:如果要同时浇灌整块草坪,最少需要打开多少个喷头?

输入格式

输入包含若干组测试数据。

第一行一个整数T表示数据组数;

每组数据的第一行是整数n、 L和W;

接下来的n行,每行包含两个整数,给出一个喷头的位置和浇灌半径(上面的示意图是样例输入第一组数据所描述的情况)。

输出格式

对每组测试数据输出一个数字,表示要浇灌整块草坪所需喷头数目的最小值。如果所有喷头都打开也不能浇灌整块草坪,则输出-1。

思路

很明显的贪心问题,因为是一块草地,所以要考虑长和宽,宽的话只需要在输入数据的时候考虑一下半径,如果半径小于等于宽的二分之一就直接略过,在考虑长的时候不能以喷水的最长去考虑,要考虑和草地的交点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值