算法基础之python实现贪心算法中的雷达安装问题和二分法中誊抄书籍问题
一、雷达安装问题(贪心算法)
1.1 问题描述
1.2 问题分析
1.3 程序代码
# -*- coding: utf-8 -*-
"""
Created on Tue Mar 20 15:33:38 2018@author: lizihua
"""
import math
nd=input("请输入小岛数量n和雷达半径d:").split(' ')
nd = list(map(int, nd))
n=nd[0]
d=nd[1]
#每个小岛对应雷达的范围(是一个线段,left=s[i][0] ,right=s[i][1] )
#不要使用这个定义列表(s=[[0,0]]*n) ,因为使用这种,后面对其赋值时,会使得每行都一样
s=[[0 for col in range(2)] for row in range(n)]
#输入每个小岛的坐标(x,y)
xy=[[0,0]]*n
flag=1
for i in range(n):xy[i]=input("请输入第"+str(i+1)+"个小岛的坐标:").split(' ')xy[i]=list(map(int,xy[i]))def solve():global sans=1s=sorted(s) #按左端点从小到大排列now=s[0][1]for i in range(n):if s[i][0]<=now:now=min(now,s[i][1])else:ans+=1now=s[i][1]return ansfor i in range(n):if xy[i][1]>d:flag=0else:s[i][0]=xy[i][0]-(math.sqrt(d*d-xy[i][1]*xy[i][1]))s[i][1]=xy[i][0]+(math.sqrt(d*d-xy[i][1]*xy[i][1]))
if flag:print("雷达数最少为:",solve())
else:print("无解")
1.4 结果显示
二、誊抄书籍(二分算法+贪心算法+递归算法)
2.1 问题描述
2.2 问题分析
2.3 程序代码
# -*- coding: utf-8 -*-
"""
Created on Tue Mar 20 18:11:58 2018@author: lizihua
"""
mk=input("请输入书的数量m和抄写员的数量k:").split(' ')
mk = list(map(int, mk))
m=mk[0]
k=mk[1]
result=[] #结果存入result
#输入每本书的页数
a=input("请输入m本书的页数:").split(' ')
a=list(map(int,a))#判断最大堆的页数小于等于ans是否可行
def check(ans):s=0now=0#从后往前判断每本书,若可以则放入当前堆for i in range(m-1,-1,-1):if now+a[i]>ans:s+=1now=a[i]else:now+=a[i]if now>0:s+=1#判断最后总堆数是否小于等于kif s>k:return 0else:return 1#用递归方式输出最后结果
#当前处理到第book本书,第scriber堆,当前堆的页数是now,每堆页数不超过ans
def printing(book,ans,scriber,now):if book<0:return
#当前书不能加入当前堆,则需要添加分隔符if book==(scriber-1) or now+a[book]>ans:
#由于check函数是倒着检验的,因此输出正常是倒着的,利用list的insert函数,使其正着输出result.insert(0,'/')result.insert(0,str(a[book])) printing(book-1,ans,scriber-1,a[book])else:result.insert(0,str(a[book]))printing(book-1,ans,scriber,now+a[book]) #二分查找搜索范围,最大值r是所有书的总页数,最小值l是页数最多那本书的页数
l=max(a)
r=sum(a)
while l<=r:mid=(l+r)/2if check(mid):r=mid-1else:l=mid+1
printing(m-1,l,k-1,0)
print(result)
2.4结果显示
算法基础之python实现贪心算法中的雷达安装问题和二分法中誊抄书籍问题相关推荐
- 算法基础--优惠券问题(贪心算法)
算法基础–优惠券问题(贪心算法) 近期某商场由于周年庆,开启了"0元购"活动.活动中,消费者可以通过组合手中的代金券,实现0元购买指定商品. 聪明的小团想要用算法来帮助他快速计算: ...
- 算法基础(Java)--贪心算法
前言 前面简单的介绍了八大经典排序算法,此文将要介绍贪心算法,并介绍一些常见贪心算法题目. 1. 贪心算法的概念 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最 ...
- (Java)算法基础6:图/贪心算法(带模板上考场,模板一定滚瓜烂熟解决考场订制)
图由点集和边集构成. 有向图有箭头如下下图,无向图无箭头如下图 邻接表,如下图,记录ABCD的直接邻居. 这种结构可以表达所有图,比如有权值的图,如下下图 邻接矩阵法:用一个矩阵来表达上图(有向图,无 ...
- 八十二、Python | Leetcode贪心算法系列
@Author:Runsen @Date:2020/7/5 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- python leetcode_八十二、Python | Leetcode贪心算法系列
@Author:Runsen @Date:2020/7/5 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- leetcode 455 分发饼干(c++和python) 贪心算法
目录 1 贪心算法: 2 题目描述 3 解题思路 4 c++ 5 python 1 贪心算法: 保证每次局部操作是最优解,从而是最终得到的结果是全局最优解. 2 题目描述 有一群孩子和一堆饼干,每个孩 ...
- python 实现贪心算法
文章目录 贪心算法 一. 算法概述 1. 简介 2. 基本步骤 二. 基本实现 1. 实例 2. 分析步骤 3. 代码实现 三. 数模实战 1. 题目展示 2. 题目分析 2.1 公式 2.2 实现 ...
- 数据结构与算法学习⑤(BFS和DFS 贪心算法 二分查找)
数据结构与算法学习⑤ 数据结构与算法学习⑤ 1.BFS和DFS 1.1.深度优先搜索算法 1.2.广度优先搜索算法 面试实战 102. 二叉树的层序遍历 104. 二叉树的最大深度 515. 在每个树 ...
- 算法学习笔记22:贪心算法
目录 贪心算法:如何用贪心算法实现Huffman压缩编码 如何理解"贪心算法" 贪心算法实战分析 1.分糖果 2. 钱币找零 3. 区间覆盖 解答开篇 内容小结 贪心算法:如何用贪 ...
最新文章
- 【杂谈】为什么你在有三AI看不到最新论文的解读,其实一直都有的
- BZOJ 2038: [2009国家集训队]小Z的袜子(莫队算法例题)
- TCP之三次握手和四次挥手过程
- matlab画坐标系,Matlab绘制图形坐标轴操作汇总 | 望天博客
- 杭电1963 完全背包
- 财务报表越做越丑?这些秒杀Excel的可视化工具,人人都能用
- Linux之time命令
- 【python】Tkinter可视化窗口(一)
- 中望3d快捷键命令大全_cad快捷键命令大全
- 【数学建模常用模型】分类专题
- XML的写入_dom4j添加、删除、修改Xml文件内容
- [Python趣味应用]总有人想偷看你电脑?留下证据后办他~~
- 2016年趋势科技夏令营面试题目
- 记录一次 JS 解密去混淆的经历 -- 如何破解加密的 JS 代码(一)
- 支付分账的体系包含哪些?
- 【原创整理】软件测试自我记录(目前携程+招银网络科技)
- 程序员除了代码还应该有什么
- 电子书下载:Adobe PDF 文档格式开发参考 PDF Reference 1.7
- 适合平板用的Android版本,安卓平板专享 推荐五款Pad版应用浏览器
- STM32F1与STM32CubeIDE编程实例-磁簧开关(Reed Switch)驱动
热门文章
- 从一般管理原则看微软的重组
- 【C#】获取程序中Properties下的AssemblyInfo.cs下的信息
- 状态机——简单自动售卖机的实现
- PyQt5实例 画板小程序
- 错误:无效参数:could not find capabilities for arch=aarch64
- oracle查看和修改字符集,oracle字符集的查看和修改
- 微信登录界面安卓代码_安卓模拟器微信登录闪退,转圈,停止运行解决方法
- Linux安全扫描概述
- 你有被世界杯期间“脑残式广告”洗脑吗?
- Spring Boot Vue Element入门实战(四)主页面开发