首页 > 编程语言 >活动安排 贪心算法

活动安排 贪心算法

时间:2023-11-26 22:00:46浏览次数:31  
标签:activities end int 安排 ++ 算法 Activity 活动 贪心

会议(活动)安排

如题:

思路:

贪心算法

假设现在有五组数据

1.将活动按照结束时间递增排序

2.当前安排的活动的结束时间小于等于下一个活动的开始时间

ps:如果两个活动的结束时间相同,选择开始时间较晚的

a1 3,5 a2 1,4
a2 1,4 a1 3,5
a3 0,6 a3 0,6
a4 5,7 a4 5,7
a5 3,8 a5 3,8

选出 a1 和 a4

有两个时间所有选择使用结构体

#include<stdio.h>
#include<stdlib.h>

//活动有开始和结束时间,用结构体来存
typedef struct{

    int start;
    int end;

} Activity;

//比较函数,用于排序活动
int compare(const void* a, const void* b){

    // a,b 表示要进行比较的两个活动
    //强制类型转换
    Activity* activityA = (Activity*)a;
    Activity* activityB = (Activity*)b;
    
    return (activityA->end - activityB->end);
}

int scheduleActivities(Activity activities[], int n){

    // 按照活动结束时间从早到晚进行排序
    qsort(activities, n, sizeof(Activity), compare);

    int count = 1;  //初始化计数器为 1 ,已安排的活动数量
    int end_time = activities[0].end;  //初始化end_time为第一个活动的结束时间

    //遍历每个活动
    for (int i = 1; i < n; i++){

        if (activities[i].start >= end_time){

            count++;
            end_time = activities[i].end;

        }
    }

    return count;  
}

int main(){

    int m;
    scanf("%d", &m); //组数
    int j = 0;

    for (int t = 0; t < m; t++){

        int n;
        scanf("%d", &n);  //每组测试数据的活动数量

        Activity activities[n];

        //获取每个活动的起始和结束时间
        for (int i = 0; i < n; i++){

            scanf("%d %d", &activities[i].start, &activities[i].end);

        }

        int ans = scheduleActivities(activities, n);
        
        //PTA的换行,我真的阐述你的梦
        if(j == ans-1){
            printf("%d", ans);
        }
        else{
            
            printf("%d\n", ans);
        }
        j++;
    }

    return 0;
}

标签:activities,end,int,安排,++,算法,Activity,活动,贪心
From: https://www.cnblogs.com/kirei7/p/17858042.html

相关文章

  • 文心一言 VS 讯飞星火 VS chatgpt (143)-- 算法导论12.1 3题
    三、用go语言,设计一个执行中序遍历的非递归算法。(提示:一种容易的方法是使用栈作为辅助数据结构;另一种较复杂但比较简洁的做法是不使用栈,但要假设能测试两个指针是否相等。)文心一言,代码正常运行:我们可以使用栈作为辅助数据结构来执行中序遍历的非递归算法。以下是用Go语言实现的代......
  • 文心一言 VS 讯飞星火 VS chatgpt (143)-- 算法导论12.1 3题
    三、用go语言,设计一个执行中序遍历的非递归算法。(提示:一种容易的方法是使用栈作为辅助数据结构;另一种较复杂但比较简洁的做法是不使用栈,但要假设能测试两个指针是否相等。)文心一言,代码正常运行:我们可以使用栈作为辅助数据结构来执行中序遍历的非递归算法。以下是用Go语言实现......
  • 家长直呼太暴力!这些算法可能会被删除
    近日,洛谷网络科技有限公司多位用户家长向@kkksc03反映,部分算法存在血腥、暴力等不利于青少年儿童的因素出现,要求对相关算法进行整改或被删除。洛谷网络科技有限公司题目组管理员在接受采访时说道,在最近几天内,洛谷收到了数十条家长来信,声称网站教授的部分算法存在“血腥”、“暴......
  • 关于人工智能算法的深度思考(总结)
    1、神经元其实并不神奇,神奇的是它以某种相互联系的方式,可以在训练得到答案并核对答案后,立即对所走的路径上的权重进行更新(反向传播),更新的依据是答案误差大小,误差大则更新也大,误差小则更新就小。所走路径:所有单次训练被激活的神经元的组合。2、根据1,我们完全可以重新设计更好的神......
  • NOIP 历年真题 贪心
    数据范围较小时,可以考虑dp。设\(f(i,j)\)表示当前段末尾为\(i\),上一段末尾为\(j\)的最小代价。转移为:\[f(i,j)=\min_{s_i-s_j\ges_j-s_k}f(j,k)+(s_i-s_j)^2\]时间复杂度\(O(n^3)\)。不难想到一个性质:要使得\(f(i,j)\)最小,上一段末尾\(j\)要尽可能靠后。这样就......
  • 高精度算法总结
    高精度加法题目链接:https://www.acwing.com/activity/content/problem/content/825/代码模版:1#include<iostream>2#include<vector>34usingnamespacestd;56//C=A+B7vector<int>add(vector<int>&A,vector<int>&......
  • C/C++ 常用加密与解密算法
    计算机安全和数据隐私是现代应用程序设计中至关重要的方面。为了确保数据的机密性和完整性,常常需要使用加密和解密算法。C++是一种广泛使用的编程语言,提供了许多加密和解密算法的实现。本文将介绍一些在C++中常用的加密与解密算法,这其中包括Xor异或、BASE64、AES、MD5、SHA256、RS......
  • PCA (principal component analysis)算法
    一、PCA算法PCA(principalcomponentanalysis)是一种应用广泛的降维算法,其基本思想是想通过找到一个低维的“最具有代表性”的方向,并将原数据映射到这个低维空间中去,从而实现数据的降维。1.算法原理  我们先从二维数据简单说明,假设我们有n个二维数据组成的数据集\(D_{n\ti......
  • nginx负载均衡 报错 “验证视图状态 MAC 失败。如果此应用程序由网络场或群集托管,请确
    在网上搜寻了很久看了很多关于验证视图状态MAC失败的解决方法。大部分人都说是在页里或web.config里加EnableEventValidation="false"EnableViewStateMac="false"ViewStateEncryptionMode="Never"这些属性的设置。但是这并不从根本上解决问题,相反这样做了反而更加不安全。我......
  • Java基于协同过滤算法开发的springboot+vue服装商城
    演示视频https://www.bilibili.com/video/BV1oH4y127fq/?share_source=copy_web&vd_source=11344bb73ef9b33550b8202d07ae139b主要功能:用户可以浏览商品和特价商品,加入购物车,直接下单支付,在我的个人中心里可以管理自己的订单,收货地址,编辑资料等。管理员可以发布商品,上下架商品,处......