今年暑假不AC(解题报告)
http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=1§ionid=3&problemid=3
乍看之下,感觉要用动态规划。仔细分析题目你会发现,当我们将结束时间排序后,可以使用逐步的贪婪算法求出最优解。
至于为什么要用结束时间排序,因为可以出现开始时间为1结束时间很长的节目。
如 节目1(1-8) 节目2(2-4) 节目3(4-7) 这时的最优解是选择节目2,3。如果使用开始时间排序的话会得到节目1,
而非最优解
#include<iostream> #include<string.h> int main() { int n,i=0; while (std::cin>>n, n != 0) { int * begin = new int [n]; int * end = new int [n]; int * res = new int [n]; memset (res,0,n* sizeof ( int )); int index = 0; for ( int i = 0; i < n; i++) { std::cin>>begin[i]>>end[i]; } for ( int i = 0; i < n; i++) for ( int j = n - 1 ; j > i; j--) { if (end[j] < end[j - 1]) { int e = end[j]; end[j] = end[j-1]; end[j-1] = e; int b = begin[j]; begin[j] = begin[j-1]; begin[j-1] = b; } else if (end[j] == end[j-1]) { if (begin[j] < begin[j-1]) { int temp = begin[j]; begin[j] = begin[j-1]; begin[j-1] = begin[j]; } } } for ( int i = 0; i < n; i++) { if (res[index] <= begin[i]) res[++index] = end[i]; } std::cout<<index<<std::endl; delete begin; delete end; delete res; } return 0; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?