贪心算法-活动安排问题(代码片段)

dump16 dump16     2023-04-16     125

关键词:

活动安排问题

  • 问题描述

    有n个需要使用同一资源的活动,且在同一时段只有一个活动能使用该资源。
    每个活动i都有一个起始时间 si 和结束时间 fi ,且 si < ei 。如果选择了活动 i,则它在半开时间区间 [si,ei) 内占用资源。若区间 [si, ei) 与区间 [sj,ej) 不相交,则称活动 i 与活动 j 是相容的。
    该问题就是要安排这些活动使得尽量多的活动能不冲突地举行。
    归纳: 活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。

  • 解题思路

    每次总是选择具有最早完成时间的活动,为未安排活动留下尽可能多的时间。该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。
    贪心算法 是指在对问题求解时,不从整体最优上加以考虑,总是做出某种意义上的局部最优解。)

  • 解题步骤

    1.将各项活动按照结束时间单调递增排序;
    2.每次选择具有最早完成时间的活动,并计数。

  • 实例

兼容问题

设有 n 个任务,其中每个任务有一个起始时间 si 和一个结束时间 ei ,且 si < ei ,同一时间只能完成一个任务。如果选择了任务 i ,则它在时间区间 [si ,ei) 内占用资源。若区间 [si,ei) 与区间 [sj, ej)不相交,则称任务 i 与任务 j 是相容的。
那么,对于给定的任务时间区间,能互相兼容的最大任务个数是多少呢?

输入格式:

第一行一个整数 n (1<=n<=1000);
接下来 n 行,每行两个整数 si 和 ei 。

输出格式:

互相兼容的最大任务个数。

输入:

4
1 3
4 6
2 5
1 7

输出:

2

  • 完整代码
#include<stdio.h>

int main()
   int n,i,j,number=1,t,final;
   int s[1200],e[1200];
   scanf("%d",&n);
   for(i=0;i<n;i++)
       scanf("%d%d",&s[i],&e[i]);
   
   for(i=0;i<n-1;i++)
       for(j=0;j<n-i-1;j++)
           if(e[j]>e[j+1])
               t=s[j];
               s[j]=s[j+1];
               s[j+1]=t;
               t=e[j];
               e[j]=e[j+1];
               e[j+1]=t;
           
       
   
   final=e[0];
   for(i=1;i<n;i++)
       if(s[i]>=final)
           number++;
           final=e[i];
       
   
   printf("%d",number);
   return 0;

参考资料:从零开始学贪心算法

贪心算法-第一节:贪心算法概述(代码片段)

...题目描述②:解题思路③:完整代码(2)活动安排问题①:题目描述②:解题思 查看详情

python_分治算法贪心算法动态规划算法(代码片段)

...思想2、寻找假币示例二、贪心算法1、思想2、最大不相容活动安排示例三、动态规划1、思想2、最大和路径3、背包问题4、动态规划和贪心算法的区别一、分治算法思想分治算法是一种化繁为简的算法思想。分治算法往往应用于... 查看详情

数据结构与算法笔记(十七)——贪心算法及经典案例(找零问题背包问题拼接最大数字问题活动选择问题)(代码片段)

一、贪心算法贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法并不保证会得到最优... 查看详情

数据结构与算法笔记(十七)——贪心算法及经典案例(找零问题背包问题拼接最大数字问题活动选择问题)(代码片段)

一、贪心算法贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法并不保证会得到最优... 查看详情

贪心算法-活动安排问题(代码片段)

活动安排问题问题描述有n个需要使用同一资源的活动,且在同一时段只有一个活动能使用该资源。每个活动i都有一个起始时间si和结束时间fi,且si<ei。如果选择了活动i,则它在半开时间区间[si,ei)内占用资源。若区间[si,ei)... 查看详情

贪心算法回溯算法(代码片段)

...问题化简为一个更小的与原问题具有相同形式的子问题。活动安排问题回溯算法应用回溯法求解时,需要明确定义问题的解空间。旅行商问题–>使用排列数解决。用约束函数在扩展结点处剪去不满足约束条件的子树;... 查看详情

算法设计与分析贪心算法--活动安排问题

活动安排问题https://blog.csdn.net/qq_40452317/article/details/88875384贪心算法汇总--喷水装置问题、会场安排问题、过河问题https://blog.csdn.net/liujiuxiaoshitou/article/details/69728714 查看详情

活动安排问题-贪心算法

贪心算法:贪心算法总是做出在当前看来最好的选择,也就是贪心算法不从整体最优化的角度考虑。它所做出的选择只是在某种意义上的局部最优选择性质:最优子结构性质当一个问题的最优解包含其子问题的最优解... 查看详情

贪心算法(贪婪算法)(代码片段)

贪心算法(贪婪算法)文章目录**贪心算法思想**选择排序平衡字符串买卖股票的最佳时机跳跃游戏钱币找零多机器调度问题举办活动数量最多无重叠区间贪心算法思想​1.贪心算法(又称贪婪算法)是指,在对问题求解... 查看详情

贪心算法(代码片段)

贪心策略  总是做出当前做好的选择。  贪心策略:将问题分成多个子问题;子问题求局部最优解;局部最优解组合成原问题的解。  分类:简单贪心 区间贪心咖啡豆问题 题目描述FatMousepreparedMpoundsofcatfood,readytotrade... 查看详情

nyoj14-会场安排问题(贪心)(代码片段)

14-会场安排问题内存限制:64MB时间限制:3000msSpecialJudge:Noaccepted:9submit:15题目描述:学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动... 查看详情

背包问题(贪心算法)(代码片段)

...意:这是背包问题,而不是0-1背包问题,背包问题可以用贪心算法进行求解,但0-1无法用贪心算法求解,需要用动态规划算法求解;首先对贪心算法做一下总结,以及它与动态规划算法的区别:贪心算法两个最重要的性质:(1... 查看详情

贪心算法(代码片段)

Java实现贪心算法(找零钱问题)1packagecom.java;23importjava.util.Random;4/**5*贪心算法6*贪心算法,又称贪婪算法,是指在对问题求解时,总是做出在当前看来是最好的选择。7*也就是说,不从整体最优解出发来考虑,它所做出的仅是在... 查看详情

hdu2037今年暑假不ac(贪心,活动安排问题)(代码片段)

今年暑假不ACTimeLimit:2000/1000ms(Java/Other)   MemoryLimit:65536/32768K(Java/Other)TotalSubmission(s):15   AcceptedSubmission(s):13Font: TimesNewRoman | Verdan 查看详情

背包问题(贪心算法)(代码片段)

  贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。  贪心算法还是比较好理解的一个算法,以前我也... 查看详情

核心算法6贪心算法(代码片段)

贪心算法就是遵循某种既定原则,不断地选取当前条件下最优的选择来构造每一个子步骤的解决方案,直到获得问题最终的求解。在对问题求解时,总是做出在当前看最好的选择。也就是说,不从整体最优上考虑,所做的仅是在... 查看详情

《算法导论》读书笔记

  前言:贪心算法也是用来解决最优化问题,将一个问题分成子问题,在现在子问题最优解的时,选择当前看起来是最优的解,期望通过所做的局部最优选择来产生一个全局最优解。书中先从活动选择问题来引入贪心算法,分... 查看详情

python贪心算法解决分数背包问题(代码片段)

查看详情