更新一下第二题思路: 1. 首先将所有的坐标转为一个三元组(x, y, num) 1. 这里要先剔除掉一些不符合的case:x<start && y>end 2. 依据end来给这一些三元组排序,放入一个最小堆中 3. 遍历[start,end],建立一个数组,dp[i]表示终点到i时能收获到最大利益,并存下收获最大利益情况下车上的剩余座位数,dp[i]={max_profit, res_num} profit()函数是计算收入的过程,这里省略具体计算公式 1. 假设第一个弹出的是(1,3,1),则dp[3]={profit(1,3,1),2} 2. 假设第二个弹出的是(2,6,2),则dp[6]取 max(max(dp[0]...dp[2])+profit(2,6,2),max(dp[3]...dp[5])), 注意,这里取dp的时候需要满足res_num>=num 3. 假设弹出的有多个,比如又弹了一个(1,6,1), 则再计算一遍max(max(dp[0]...dp[1])+profit(1,6,1),max(dp[2]...dp[5])),取最大值 4. 总结来说,dp的设置方式如下: vector<pair<int,int>> dp; // 初始条件 dp[0]=0; // 设i点max_profit和res_num为dp[i] dp[i]={max_profit,res_num} // 下一个点终点为j点 (x_j,y_j,num_j) dp[j].max_profit=max( max(dp[0...x_j].max_profit if its res_num >= num_j), max(dp[x_j+1...y_j-1].max_profit) )
点赞 评论

相关推荐

04-01 17:31
门头沟学院 Java
全程1h,11.30面完,吃完饭,2点电话约二面面试官人很好,也开了摄像头,面完还给我说了很多学习的建议,广度和深度都要有,要多去了解为什么这样~手撕&nbsp;1.LCR121.二维数组找目标值2.LC78.子集项目拷打1.RabbitMQ和其他mq的区别(主要讲了RocketMQ和Kafka)2.项目中微服务框架怎么用的3.项目中redis缓存热点数据具体怎么用的4.项目中数据变更的时候怎么处理的5.为什么用Mysql分库6.AOP的原理7.使用AOP的时候需要注意什么8.哪些情况下AOP会失效9.项目中用到redis分布式锁具体怎么实现的10.锁的释放是怎么释放的11.Lua脚本的具体实现(没答好)12.为什么要判断锁的值与预期值是否相等13.什么情况下锁不属于自己14.项目中怎么优化sql的15.创建复合索引的时候需要注意什么16.java虚拟线程17.redis怎么处理过期key(惰性+定期)18.redis集群19.分布式一致性协议20.Raft&nbsp;协议,当主挂的时候,它是怎么重新选主的21.分布式事务22.epoll有了解吗23.操作系统的虚拟内存24.怎么做虚拟内存到物理内存的映射的25.HTTPS连接过程26.HTTPS在传输数据的时候,它用的是对称加密还是非对称加密(对称加密)27.大数据处理相关的,HBase,Flink有了解吗(了解不深)28.HBase和MySQL的主要区别(了解不深)29.什么时候能来实习,到什么时候30.反问(1.业务&nbsp;2.面试表现:很优秀,对知识点掌握很广(:谢谢哥)&nbsp;3.面试流程:2技术+1hr)#Java##面经#
点赞 评论 收藏
分享
牛客网
牛客企业服务