/*
题目内容:有n头牛(1<=n<=50,000)要挤奶。
给定每头牛挤奶的时间区间[A,B](1<=A<=B<=1,000,000,A,B为整数)。
牛需要呆在畜栏里才能挤奶。一个畜栏同一时间只能容纳一头牛。
问至少需要多少个畜栏,才能完成全部挤奶工作,以及每头牛都放哪个畜栏里?
注意:在同一个畜栏的两头牛,它们挤奶时间区间不能在端点重合。
输入格式:
第1行:一个正整数N;
第2..N+1行:第i+1行的两个整数给出第i头奶牛的挤奶时间。
输出格式:
第1行:需要畜栏的最小数;
第2..N+1行:第i+1行表示第i头奶牛被分配到的畜栏序号
输入样例:
5
1 10
2 4
3 6
5 8
4 7
输出样例:
4
1
2
3
2
4
*/#include<iostream>using namespace std;//奶牛结构体
struct cow
{long start;                    //开始挤奶的时间long end;                    //结束挤奶的时间long bucketNum=-1;            //分配的奶桶编号
};//奶桶结构体
struct bucket
{long sn;                    //编号bool inUse=false;            //正在使用的状态long latesUseEndTime=-1;    //上次结束使用的时间
};
//题目要求的数字太大了,用数组会栈溢出,而动态分配内存又比较麻烦,所以只好先用小的数目
const int MAXNUM = 50;//根据给定的奶牛开始挤奶的时间,确定它对应的最早可用的已有的奶桶编号,如果没有则返回负数
long getFirstProperBucket(struct bucket buc[], long total, long startTime) {long ret = -1;                                    //若已经使用过的奶桶中没有可用的,则返回负数for (long i = 0; i < total; i++) {//如果上一次使用的结束时间比现在要求的开始时间早,则可用if (buc[i].latesUseEndTime < startTime) {ret = i;break;}}return ret;
}//returns the total amount of buckets needed
int solve(struct cow cow[], long n) {struct bucket buc[MAXNUM];                        //奶桶数组,最多每头奶牛分配一个奶桶long total = 0;                                    //总共所需奶桶数目for (long i = 0; i < n; i++) {long b = getFirstProperBucket(buc, total, cow[i].start);    //获取一个编号if (b >= 0) {                                //如果是正数,代表可用
        }else {                                        //如果是负数,不可用,则添加一个新的奶桶,再分配编号total++;b=getFirstProperBucket(buc, total, cow[i].start);}buc[b].latesUseEndTime = cow[i].end;        //将奶桶的上次使用结束时间标记上cow[i].bucketNum = b;                        //将奶桶编号记录到奶牛
    }return total;
}int main() {struct cow cow[MAXNUM];                    //奶牛数组long n;                                    //奶牛数量
cin >> n;//输入数据和初始化for (long i = 0; i < n; i++){cin >> cow[i].start >> cow[i].end;cow[i].bucketNum = -1;}//所需的奶桶数目int num = solve(cow, n);cout << num << endl;//依次输出奶牛分配的奶桶编号for (long i = 0; i < n; i++) {cout << cow[i].bucketNum+1<<endl;}cin >> num;                                //VC中防止程序直接结束return 0;
}

转载于:https://www.cnblogs.com/memoryLost/p/10703310.html

贪心算法 - 挤奶问题相关推荐

  1. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  2. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  3. 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码

    1. 贪心算法概览 贪心算法是一种算法思想.希望能够满足限制的情况下将期望值最大化.比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下用 ...

  4. 一份贪心算法区间调度问题解法攻略,拿走不谢

    作者 | labuladong 来源 | labuladong(ID:labuladong) [导读]什么是贪心算法呢?贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多 ...

  5. 漫画:五分钟学会贪心算法!

    假设一个问题比较复杂,暂时找不到全局最优解,那么我们可以考虑把原问题拆成几个小问题(分而治之思想),分别求每个小问题的最优解,再把这些"局部最优解"叠起来,就"当作&qu ...

  6. 下载插件(贪心算法)

    小扣打算给自己的 VS code 安装使用插件,初始状态下带宽每分钟可以完成 1 个插件的下载.假定每分钟选择以下两种策略之一: 使用当前带宽下载插件 将带宽加倍(下载插件数量随之加倍) 请返回小扣完 ...

  7. Runnable接口和贪心算法

    1 Runnable接口 Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现.设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议.激活的意思是说某个线程已启动并且尚未停止 ...

  8. 拜托,别再问我贪心算法了!

    来自:码海 前言 上篇一文学会动态规划解题技巧 被不少号转载了,其中发现有一位读者提了一个疑惑,在求三角形最短路径和时,能否用贪心算法求解.所以本文打算对贪心算法进行简单地介绍,介绍完之后我们再来看看 ...

  9. Dijkstra 贪心算法 动态规划

    我认为 Dijkstra算法 的本质是 广度优先搜索, 而此处的广度是定义在路程的cost之上的. (就好比从圆心处向外扩散一个圆环,首次碰到的就是最近) 动态规划泛指,重叠子问题与原问题的推算关系( ...

最新文章

  1. 通用SQL数据库查询语句精华使用简介
  2. Oracle - Log buffer 的相关设置
  3. Linux环境下手动配置sbt
  4. Django-form表单
  5. android 百度定位开启后fragment 不显示,解决Android百度地图MapView在ViewPager中Fragment切换黑屏问题...
  6. outlook邮箱限额满了
  7. C# 8 新提案让泛型 Attribute 成为现实
  8. FFmpeg - C++中使用ffmpeg库
  9. 数字化转型 数字分析_数字化转型的人员问题
  10. Android四大组件之——Activity(一)定义、状态和后退栈(图文详解)
  11. arm linux下交叉编译valgrind工具进行内存泄露检测和性能分析
  12. 线段树详解 一(单点更新 区间查询)
  13. java简历项目经验描述,分分钟搞定!
  14. leaflet中文文档
  15. oracle 虚拟机安装mac os,oracle vm virtualbox虚拟机安装mac os x详细图解
  16. 这两天用鸿蒙开发板做了个“自动门锁”
  17. 微信小程序:选择图片、上传图片(应用:切换用户头像)及过程中遇到的问题
  18. 登录案例的演示 涉及request的转发
  19. 循环语句—for/while/do...while
  20. #Linux#进程间通信# 管道(pipe)-标准流管道pipe

热门文章

  1. eclipse java3d_Using Xj3D in your Java Application
  2. 基于UMAT的低密度泡沫本构实现
  3. ansys中导入自定义本构模型的算例
  4. 数字藏品平台“新百团大战”乱像:拉新团长一天“躺赚”上万
  5. 基于软件定义无线电的实时频谱分析仪设备连接方法(一)简单2端口TCP/IP连接
  6. 出售价值,创造盈利——ERP从业者共勉 读高德拉特《仍然不足够》
  7. 实现多个存储服务器上文件浏览器打包下载
  8. 倾斜框IOU计算实现(c++,python)
  9. matlab 比较矩阵差异,Matlab矩阵操作
  10. 一个很好的ruby教程