热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Greedy:StallReservations(POJ3190)

牛挤奶题目大意:一群牛很挑剔,他们仅在一个时间段内挤奶,而且只能在一个棚里面挤,不能与其他牛共享地方,现在给你一群牛,问你如果要全部牛都挤奶,至少需要多少牛棚?这一题如果把时间区间

                  技术分享

                  牛挤奶

  题目大意:一群牛很挑剔,他们仅在一个时间段内挤奶,而且只能在一个棚里面挤,不能与其他牛共享地方,现在给你一群牛,问你如果要全部牛都挤奶,至少需要多少牛棚?

  这一题如果把时间区间去掉,那就变成装箱子问题了(装箱子要用Splay维护),但是现在规定了区间和时间,我们只用贪婪算法就可以了,每次只用找到最小就可以了(用堆维护)。

  PS:一开始我想到用AVL去维护,的都不知道我在想什么,简直浪费时间

  1 #include 
  2 #include 
  3 #include 
  4 
  5 using namespace std;
  6 
  7 typedef struct iterval
  8 {
  9     int cows_num;
 10     int Which_Stall;
 11     int start;
 12     int end;
 13 }Cow;
 14 typedef struct box
 15 {
 16     int box_num;
 17     int min_t;
 18 }Stall;
 19 typedef int Position;
 20 int fcomp1(const void *a, const void *b)
 21 {
 22     return (*(Cow *)a).start - (*(Cow *)b).start;
 23 }
 24 int fcomp2(const void *a, const void *b)
 25 {
 26     return (*(Cow *)a).cows_num - (*(Cow *)b).cows_num;
 27 }
 28 
 29 static Cow cows_set[50000];
 30 static Stall s_heap[50001];
 31 static int sum_of_stalls;
 32 
 33 void Search(const int);
 34 void Insert(Stall, Position);
 35 Stall Delete_Min(void);
 36 
 37 int main(void)//这一题用堆维护
 38 {
 39     int n;
 40     while (~scanf("%d", &n))
 41     {
 42         for (int i = 0; i )
 43         {
 44             scanf("%d%d", &cows_set[i].start, &cows_set[i].end);
 45             cows_set[i].cows_num = i;
 46         }
 47         qsort(cows_set, n, sizeof(Cow), fcomp1);
 48         Search(n);
 49     }
 50     return 0;
 51 }
 52 
 53 void Insert(Stall goal, Position pos)
 54 {
 55     Position s = pos, pr;
 56 
 57     for (; s > 1; s = pr)//上滤
 58     {
 59         pr = s % 2 == 0 ? s >> 1 : (s - 1) >> 1;
 60         if (s_heap[pr].min_t > goal.min_t)
 61             s_heap[s] = s_heap[pr];
 62         else break;
 63     }
 64     s_heap[s] = goal;
 65 }
 66 
 67 Stall Delete_Min(void)
 68 {
 69     Stall mins_stalls = s_heap[1],tmp = s_heap[sum_of_stalls--];
 70     Position pr, s1, s2;
 71 
 72     for (pr = 1; pr <= sum_of_stalls;)
 73     {
 74         s1 = pr <<1; s2 = s1 + 1;
 75         if (s2 <= sum_of_stalls)
 76         {
 77             if (s_heap[s1].min_t < s_heap[s2].min_t){
 78                 s_heap[pr] = s_heap[s1]; pr = s1;
 79             }
 80             else{
 81                 s_heap[pr] = s_heap[s2]; pr = s2;
 82             }
 83         }
 84         else
 85         {
 86             if (s1 <= sum_of_stalls){
 87                 s_heap[pr] = s_heap[s1]; pr = s1;
 88             }
 89             break;
 90         }
 91     }
 92     Insert(tmp, pr);
 93     return mins_stalls;
 94 }
 95 
 96 void Search(const int n)
 97 {
 98     Stall tmp;
 99     sum_of_stalls = 1;
100     tmp.box_num = 1; tmp.min_t = cows_set[0].end;
101     Insert(tmp, 1);
102     cows_set[0].Which_Stall = 1; 
103 
104     for (int i = 1; i )
105     {
106         if (cows_set[i].start <= s_heap[1].min_t)//放不下
107         {
108             tmp.box_num = ++sum_of_stalls; tmp.min_t = cows_set[i].end;
109             Insert(tmp, sum_of_stalls);
110             cows_set[i].Which_Stall = sum_of_stalls;
111         }
112         else
113         {
114             tmp = Delete_Min();
115             tmp.min_t = cows_set[i].end;
116             cows_set[i].Which_Stall = tmp.box_num;
117             Insert(tmp, ++sum_of_stalls);
118         }
119     }
120     printf("%d\n", sum_of_stalls);
121     qsort(cows_set, n, sizeof(Cow), fcomp2);
122     for (int i = 0; i )
123         printf("%d\n", cows_set[i].Which_Stall);
124 }

技术分享

Greedy:Stall Reservations(POJ 3190)


推荐阅读
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
  • 生产环境下JVM调优参数的设置实例
     正文前先来一波福利推荐: 福利一:百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。福利二 ... [详细]
  • PriorityQueue源码分析
     publicbooleanhasNext(){returncursor&amp;amp;lt;size||(forgetMeNot!null&amp;amp;am ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有