二模 (5) day2

第一题:

有 N 个人顺时针围在一圆桌上开会,他们对身高很敏感。 因此决定想使得任意相邻的两人的身高差距最大值最小。 如果答案不唯一,输出字典序最小的排列,指的是身高的排列。N<=50

 

解题过程:

1.最大值最小的问题直接想到二分答案。。然后就变成判断环的问题,但是想不到什么好的算法,就直接爆搜了。。事实证明全部超时。。

2.正解:首先有一个贪心原则:即最高的和最矮的人肯定不会排到一起,然后他们之间的人必定是递增或者递减的(最矮的递增到最高的,然后最高的递减到最矮的),可用交换的方法证明。那么先把人按高度从小到大排序,就变成一个双线dp问题。

F[i][j](i<j)表示 一个人在i,一个人在j,且1~j这些点都走过的最优解。

当i+1=j时,F[i][j]=min{max(F[k][i],dist[k][j])}; ( k<i )

当i+1<j时,F[i][j]=max(F[i][j-1],dist[j-1][j]);

ans=min{max(F[i][n],dist[i][n])};

最后输出答案也是个难点,一开始想到记录F[i][j]的转移方式然后递归输出,但是实际上是没法确定两个人的顺序的,也就是没法保证字典序最小。

实际上可以贪心求解。。先模拟从maxH到minH的路径,倒着走,从minH出发,那么每次要走的尽可能远。。剩下的点就是minH到maxH的路径了。

初始得分0分。

 


 

第二题:

题目描述:

在直角坐标系上,有 N 个边平行于坐标轴的矩形。你的任务是把其中的 K 个矩形染色,使按次序放下后,可以看见的有色面积最大。可看见的意思就是这一部分没有被后面的矩形覆盖。你的答案是返回 K 个整数,表示你染色的是哪 K 个矩形。如果有多种答案,输出字典序最小的。

 

算法:(离散化/矩形切割/线段树)

 

第一次写矩阵切割,记录一下大致思路。

首先有个上浮的思想,假设有N个矩形,(倒序放置矩形)第一个矩形深度为1,第K个矩形深度为K。每放一个矩形,就想象让往上面浮,每次碰到之前放过的矩形,就让他断裂,分成几个矩形,继续上浮(递归实现)。。

算法实现:

1.先判断相离的情况,让矩形一直上浮直到到了顶层或者碰到另外一个不相离的矩形。

2.根据两个矩形的位置关系切割,然后分成多个小矩形继续上浮。


 

第三题:

神牛 LXX 昨天刚刚满 18 岁,他现在是个成熟的有为男青年。他有 N 个 MM,分别从 1 到 N 标号。这些 MM 有些是互相认识的。现在,LXX 为了处理和 MM 们复杂的关系,想把他们划分成尽量多的集合,要求任意两个属于不同集合的 MM 都必须互相认识。这样方便交流。现在 LXX 想知道最多可以分成多少个集合,每个集合的人数是多少。1≤N≤100000,1≤M≤2000000。

 

解题过程:

1.首先如果两个元素之间没有边相连,那么他们肯定只能在同一个集合了。这是此题所有算法的基础。。。于是果断地写了个并查集,然后用邻接矩阵存边,能过N<=3000的数据吧。 于是拿到了50分左右。

2.正解:M相对于N来说还是比较小的,那么可以找出边最少的点K,找出和它没有相连的点合并到一个集合(还是并查集实现,O(M)的时间扫一遍所有边)。这样就可以把很多点缩成一个点,最坏的情况也就是N=2000,M=2000000左右的时候,不能缩点,那么点还是2000个,所以缩点后的点就变成了最多2000个,然后用1中的算法实现即可。。

 

表示被这道题虐爆了。。没有超纲的东东,只有想不到的巧方法。。

 

转载于:https://www.cnblogs.com/vb4896/p/3995955.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中有多种用于二分类模型的库和算法可以选择使用。常用的库包括Scikit-learn和TensorFlow等。下面我将介绍一种常见的二分类模型的构建过程。 1. 数据的处理: 首先,你需要准备训练数据集和测试数据集。通常,你需要将原始数据进行预处理,包括数据清洗、特征选择、特征缩放等。可以使用Scikit-learn的数据预处理工具来完成这些任务。 2. 构建模型: 在Python中,你可以使用逻辑回归、支持向量机(SVM)、决策树、随机森林等算法来构建二分类模型。其中,逻辑回归是一种简单且常用的二分类算法,可用于估计样本属于某一类别的概率。你可以使用Scikit-learn中的LogisticRegression类来构建逻辑回归模型。 3. 训练模型: 在构建模型之后,你需要使用训练数据集对模型进行训练。可以使用fit()方法来拟合模型,即通过学习训练数据集的特征和标签之间的关系来调整模型参数,使其能够准确地预测新的样本。例如,对于逻辑回归模型,你可以使用fit()方法来训练模型。 4. 验证模型: 训练模型之后,你需要使用测试数据集对模型进行验证。可以使用predict()方法来对测试数据进行预测,并与实际标签进行比较,计算模型在测试数据集上的准确性或其他性能指标。可以使用Scikit-learn中的评估函数来评估模型的性能。 总结起来,构建Python二分类模型的步骤包括数据的处理、模型的构建、模型的训练和模型的验证。你可以根据具体的需求选择合适的算法和库来实现二分类模型的构建。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python深度学习笔记(三)二分类模型](https://blog.csdn.net/Devin00123/article/details/105947728)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python-Level5-day05:二分类支持向量机模型及其三种核函数实现线性分类方法,水果分类案例,朴素贝叶斯实现...](https://blog.csdn.net/qq_45871216/article/details/125461100)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值