简介

下面链接有赛题和数据

http://www.m2ct.org/view-page.jsp?editId=12&uri=0D00233&gobackUrl=modular-list.jsp&pageType=smxly&menuType=flowUp

第二问的公式

\[\frac{x_{i}-f}{v_{i}} \geq T+\sum_{j=0(j !=i)}^{29} \frac{x_{j}-f}{r}
\]

T 路径上一周消耗的时间

f 最低电量

r 充电速度

v 每个sensor的消耗速度

x 每个sensor的电池电量

code

主要使用了模拟退火

main.py

#coding=utf-8
from solution import solution
from draw import draw
import time
import winsound def main1():
solve = solution(salesNumber = 1)
# 因为 xlsx2 文件可以用来解决问题1,2,3所以直接都读取了
myNodes = solve.readFromFile('B题附件2.xlsx')
start = time.clock()
xmin, x, y = solve.solutionForSubjectOne()
elapsed = (time.clock() - start)
drawObj = draw()
drawObj.drawY(x, y)
drawObj.drawRoute1(xmin, myNodes)
print("Time used:", elapsed) def main2():
# 问题2 要赋值
xmin = [16, 27, 15, 12, 8, 11, 14, 6, 7, 9, 1, 2, 0, 17, 20, 19, 18, 25, 26, 29, 21, 23, 24, 28, 22, 4, 3, 5, 10, 13]
solve = solution(salesNumber=1)
# 因为 xlsx2 文件可以用来解决问题1,2,3所以直接都读取了
myNodes = solve.readFromFile(
'XXX')
start = time.clock()
drawObj = draw()
solve.setScheme(minEnergy=15, moveSpeed=10, chargeRate=20)
re = solve.solutionForSubjectTwo(xmin)
elapsed = (time.clock() - start)
drawObj.drawRect2(re, myNodes, 15) # 15是最小电量
print("Time used:", elapsed) def main3():
# 问题3解决方案
solve = solution(salesNumber=4)
solve.setScheme(minEnergy=15, moveSpeed=10, chargeRate=20)
solve.setCoef(consumeOneMeter = 0.001, consumeOneMa = 1)
# 因为 xlsx2 文件可以用来解决问题1,2,3所以直接都读取了
myNodes = solve.readFromFile(
'XXX')
start = time.clock()
drawObj = draw()
xmin, ymin, drawX, drawY = solve.monituihuo()
elapsed = (time.clock() - start)
drawObj.drawY(drawX, drawY)
drawObj.drawRoute3(xmin, myNodes, ymin)
# 将 xmin 拆分为4 个 travelingSalesman = []
allDistance = []
for i in range(4):
tmp = [0]
allDistance.append(0)
travelingSalesman.append(tmp)
j = 0
for i in range(len(xmin)):
if (xmin[i] != 0):
travelingSalesman[j].append(xmin[i])
else:
j += 1
re = []
for i in range(4):
tmp = solve.solveFor3(travelingSalesman[i])
re.append(tmp)
# for i in range(4):
# print(re[i])
# print(travelingSalesman[i])
newRE = []
for i in range(30):
newRE.append(0)
for i in range(4):
for j in range(len(travelingSalesman[i])):
newRE[travelingSalesman[i][j]] = re[i][j]
drawObj.drawRect2(newRE, myNodes, 15) # 15是最小电量
for i in range(len(newRE)):
print(newRE[i])
# 对每一个节点进行绘图
# drawObj.drawRect3(re, travelingSalesman, myNodes)
# 根据得到的路径图 计算 传感器节点所需要的的电池电量
print("Time used:", elapsed) def test():
solve = solution(salesNumber=4)
solve.setScheme(minEnergy=15, moveSpeed=10, chargeRate=20)
solve.setCoef(consumeOneMeter=0.001, consumeOneMa=1)
# 因为 xlsx2 文件可以用来解决问题1,2,3所以直接都读取了
myNodes = solve.readFromFile('XXX')
start = time.clock()
drawObj = draw()
newRE = [
15.0,
16.75801,
17.53926,
16.46503,
16.79056,
16.17204,
16.46503,
17.08354,
16.49758,
16.46503,
16.79056,
16.46503,
17.40906,
17.11609,
16.46503,
16.23715,
16.46503,
16.79056,
17.44161,
16.79056,
16.46503,
16.13948,
16.79056,
17.44161,
16.13948,
16.79056,
16.39992,
16.17204,
17.08354,
16.75801
]
drawObj.drawRect2(newRE, myNodes, 15) # 15是最小电量 if __name__ == "__main__":
test()
winsound.Beep(300, 2000)

utils.py

#coding=utf-8
from math import radians, cos, sin, asin, sqrt
def haversine(lon1, lat1, lon2, lat2): # 经度1,纬度1,经度2,纬度2 (十进制度数)
"""
https://blog.csdn.net/vernice/article/details/46581361
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
# 将十进制度数转化为弧度
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# haversine公式
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2
c = 2 * asin(sqrt(a))
r = 6371 # 地球平均半径,单位为公里
return c * r * 1000

node.py

#coding=utf-8
class node:
def __init__(self):
self.name = ''
self.x = 0
self.y = 0
self.energyConsumptionRate = 0 # ma/s
self.batteryCapacity = 0 # ma 存储总值
self.lastAct = 0 # 默认为0 如果上次是减去数值那么就是 -1 如果上次是加上数值那么就是1
self.plusOrMinus = 0.01 # 默认是每次增加100
self.id = 0
self.curBatteryCap = 0
self.button = False
self.numberPlus = 0 def mySet(self, name, x, y, energyConsumptionRate, batteryCapacity, id):
self.name = name
self.x = x
self.y = y
self.energyConsumptionRate = energyConsumptionRate
self.batteryCapacity = batteryCapacity
self.curBatteryCap = batteryCapacity
self.oldBatteryCapacity = batteryCapacity
self.id = id def getName(self):
return self.name def reSet(self):
self.batteryCapacity = self.oldBatteryCapacity
self.curBatteryCap = self.oldBatteryCapacity def getX(self):
return self.x def getY(self):
return self.y def pp(self):
print(self.name, self.id, '电池容量', self.batteryCapacity, '最初电量', self.oldBatteryCapacity, '加了', self.numberPlus, '次') def getV(self):
return self.energyConsumptionRate def plus(self):
self.numberPlus += 1
if(self.lastAct == -1):
self.batteryCapacity += self.plusOrMinus
self.lastAct = 1
# self.plusOrMinus = 1
elif(self.lastAct == 1):
self.batteryCapacity += self.plusOrMinus
self.lastAct = 1
elif(self.lastAct == 0):
self.batteryCapacity += self.plusOrMinus
self.lastAct = 1 def turnOn(self):
self.button = True def consume(self, time, minEnergy):
self.curBatteryCap -= time * self.energyConsumptionRate
# 校验是否符合标准只要不符合标准返回一个 -1
if(not self.button):
return 0
if(self.curBatteryCap >= minEnergy):
return 1
else:
self.plus()
return -1 def charge(self, r): # r 充电速率
delt = self.batteryCapacity - self.curBatteryCap
time = delt / r
self.curBatteryCap = self.batteryCapacity
return time def setCharge(self):
self.curBatteryCap = self.batteryCapacity
self.button = False if __name__ == '__main__':
n = node()

draw.py

#coding=utf-8
import matplotlib.pyplot as plt
from utils import haversine
import numpy as np
import xlwt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
class draw:
def __init__(self):
pass def drawRoute1(self, res, myNodes):
for i in range(len(myNodes)):
plt.figure(num=2)
plt.scatter(myNodes[i].getX(), myNodes[i].getY())
plt.annotate(myNodes[i].getName(), (myNodes[i].getX(), myNodes[i].getY()))
sumDistance = self.calcSumDistance(res, myNodes)
plt.xlabel('总路程 = ' + str(sumDistance))
self.cmdRoute(res)
plt.show() def drawRoute3(self, res, myNodes, energy):
for i in range(len(myNodes)):
plt.figure(num=2)
plt.scatter(myNodes[i].getX(), myNodes[i].getY())
plt.annotate(myNodes[i].getName(), (myNodes[i].getX(), myNodes[i].getY()))
# 绘制线条
# 首先将一个单纯的解化成四个解
travelingSalesman = []
allDistance = []
for i in range(4):
tmp = [0]
allDistance.append(0)
travelingSalesman.append(tmp)
j = 0
for i in range(len(res)):
if (res[i] != 0):
travelingSalesman[j].append(res[i])
else:
j += 1
# 得到每一个旅行商行驶的距离
sumDistance = 0
for i in range(4):
for j in range(len(travelingSalesman[i])):
lastPoint = travelingSalesman[i][j]
if (j + 1 >= len(travelingSalesman[i])):
nextPoint = travelingSalesman[i][0]
else:
nextPoint = travelingSalesman[i][j + 1]
x1 = myNodes[lastPoint].getX()
y1 = myNodes[lastPoint].getY()
x2 = myNodes[nextPoint].getX()
y2 = myNodes[nextPoint].getY()
distance = haversine(x1, y1, x2, y2)
plt.plot([x1, x2], [y1, y2])
allDistance[i] += distance
sumDistance += distance
plt.xlabel('sumDistance=' + str(sumDistance) + 'energy=' + str(energy))
plt.show() def calcSumDistance(self, res, myNodes):
sumDistance = 0
for i in range(len(res)):
lastPoint = res[i]
if (i + 1 >= len(res)):
nextPoint = res[0]
else:
nextPoint = res[i + 1]
x1 = myNodes[lastPoint].getX()
y1 = myNodes[lastPoint].getY()
x2 = myNodes[nextPoint].getX()
y2 = myNodes[nextPoint].getY()
plt.plot([x1, x2], [y1, y2])
sumDistance += haversine(x1, y1, x2, y2)
return sumDistance def cmdRoute(self, result):
result2 = []
check = False
for i in range(len(result)):
if (result[i] == 0):
check = True
if (check):
result2.append(result[i])
for i in range(len(result)):
if (result[i] == 0):
check = False
if (check):
result2.append(result[i])
for i in range(len(result2)):
print(str(result2[i]) + ' -> ', end='')
print(str(result2[0])) # 一个循环 def drawY(self, drawX, drawY):
plt.figure(num=1)
plt.title('模拟退火求TSP问题收敛图')
plt.xlabel('次数')
plt.ylabel('y')
plt.plot(drawX, drawY)
plt.show() def drawRect2(self, re, myNodes, minB):
plt.figure(num=3)
N = len(re) - 1
re = re[1:] # 去掉数据中心
index = np.arange(N)
width = 0.45
plt.bar(index, re, width, label="每个传感器的电池容量 单位(ma)", color="#90EE90")
plt.xlabel('传感器')
plt.ylabel('电池容量')
plt.title('电池容量分布图')
plt.ylim(13,18)
name = []
for i in range(1, len(myNodes)):
name.append(str(i))
plt.xticks(index, name)
plt.legend(loc="upper right")
plt.axhline(minB)
self.wr2(re, myNodes)
plt.show() def wr2(self, re, myNodes):
# 将电池电量输入到excel文件
workbook = xlwt.Workbook(encoding='utf-8')
# 创建一个worksheet
worksheet = workbook.add_sheet('My Worksheet') # 写入excel
# 参数对应 行, 列, 值
for i in range(len(re)):
worksheet.write(i, 0, myNodes[i+1].getName())
worksheet.write(i, 1, re[i])
# 保存
workbook.save('问题二电池电量.xls')

solution.py

#coding=utf-8
import xlrd
from node import node
from utils import haversine
import numpy as np
import math
import matplotlib.pyplot as plt
import random
class solution:
'''
暂时先不考虑约束吧
'''
def __init__(self, salesNumber):
self.minEnergy = 40
self.moveSpeed = 5 # 15000 / 3600
self.sumDistance = 0
self.myNodes = []
self.SalesManNum = salesNumber
self.minDistance = 0
self.chargeRate = 0.1 # r 0.5 self.consumeOneMeter = 0.0001
self.consumeOneMa = 1 def readFromFile(self, filename):
data = xlrd.open_workbook(filename)
table = data.sheet_by_name('Sheet1')
name = table.name
rowNum = table.nrows
colNum = table.ncols
print(name, rowNum, colNum)
for i in range(31):
if (i == 0):
continue
tmp = []
tmp.append(i)
for j in range(4):
tmp.append(table.cell(i, j).value)
if(i == 1):
tmp[4] = 0.000000001
tmp[4] = tmp[4] / 3600 # ma/s
minBatteryCapacity = self.minEnergy
n = node()
n.mySet(id = tmp[0], name = tmp[1], x = tmp[2], y = tmp[3], energyConsumptionRate = tmp[4], batteryCapacity = minBatteryCapacity ) # 每个电池的默认初始容量是100ma 容忍度是3
self.myNodes.append(n)
for i in range(len(self.myNodes)):
self.myNodes[i].pp()
return self.myNodes def aimFunction1(self, res):
'''
res 是一个 节点序列带上 3 个 0 的序列 list
'''
# 得到每一个旅行商走过的道路
allDistance = 0
for i in range(len(res)):
lastPoint = res[i]
if (i + 1 >= len(res)):
nextPoint = res[0]
else:
nextPoint = res[i + 1]
x1 = self.myNodes[lastPoint].getX()
y1 = self.myNodes[lastPoint].getY()
x2 = self.myNodes[nextPoint].getX()
y2 = self.myNodes[nextPoint].getY()
distance = haversine(x1, y1, x2, y2)
allDistance += distance
return allDistance def aimFunction5(self, res):
# 将res分解为4段res
result = []
tmp = [0]
for i in range(len(res)):
if(res[i] == 0):
result.append(tmp)
tmp = [0]
else:
tmp.append(res[i])
result.append(tmp)
# 计算每一个路程 消耗的时间 和 能量均衡的时候消耗的充电时间
subTime = []
subDistance = 0
for i in range(self.SalesManNum):
subTime.append(0)
for i in range(len(self.myNodes)):
self.myNodes[i].reSet()
# 从0开始的一个字符串 subTime[0]= self.solve(result[0])
subTime[1]= self.solve(result[1])
subTime[2]= self.solve(result[2])
subTime[3]= self.solve(result[3])
subTime.sort()
# 最大花瓣的时间最短 每条路径 所耗费时间 也尽可能短
return subTime[3] + subTime[0] + subTime[1] + subTime[2] def solve(self, res):
# 计算此字符串总距离
# 新增定义行走
sumDistance = 0
for i in range(len(res)):
lastPoint = res[i]
if (i + 1 >= len(res)):
nextPoint = res[0]
else:
nextPoint = res[i + 1]
x1 = self.myNodes[lastPoint].getX()
y1 = self.myNodes[lastPoint].getY()
x2 = self.myNodes[nextPoint].getX()
y2 = self.myNodes[nextPoint].getY()
sumDistance += haversine(x1, y1, x2, y2) T = sumDistance / self.moveSpeed
f = self.minEnergy
r = self.chargeRate
mA = []
mb = []
# 去除 DC 的影响
resul = []
for i in range(0, len(res)): # 默认res[0] = 0 的时候才能去除 影响
resul.append(res[i])
if len(resul) != 0:
for i in range(len(resul)):
tmp = []
for j in range(len(resul)):
if (i == j):
tmp.append(r / self.myNodes[resul[j]].getV())
else:
tmp.append(-1)
mA.append(tmp)
mb.append(T*r - (len(resul) - 1)*f + r / self.myNodes[resul[i]].getV() * f)
A = np.array(mA)
b = np.array(mb).T
re = np.linalg.solve(A,b) # 得到每一个的电池容量 allEnergy = sumDistance * self.consumeOneMeter
for i in range(len(resul)):
allEnergy += (re[i] - f) * self.consumeOneMa
return allEnergy def solveFor3(self, res):
sumDistance = 0
for i in range(len(res)):
lastPoint = res[i]
if (i + 1 >= len(res)):
nextPoint = res[0]
else:
nextPoint = res[i + 1]
x1 = self.myNodes[lastPoint].getX()
y1 = self.myNodes[lastPoint].getY()
x2 = self.myNodes[nextPoint].getX()
y2 = self.myNodes[nextPoint].getY()
sumDistance += haversine(x1, y1, x2, y2) T = sumDistance / self.moveSpeed
f = self.minEnergy
r = self.chargeRate
mA = []
mb = []
# 去除 DC 的影响 不去了
resul = []
for i in range(0, len(res)): # 默认res[0] = 0 的时候才能去除 影响
resul.append(res[i])
if len(resul) != 0:
for i in range(len(resul)):
tmp = []
for j in range(len(resul)):
if (i == j):
tmp.append(r / self.myNodes[resul[j]].getV())
else:
tmp.append(-1)
mA.append(tmp)
mb.append(T*r - (len(resul) - 1)*f + r / self.myNodes[resul[i]].getV() * f)
A = np.array(mA)
b = np.array(mb).T
re = np.linalg.solve(A,b) # 得到每一个的电池容量
return re # 对应res 的电池电量 def monituihuo(self): # 解决问题三
T = 100 # initiate temperature
oldT = 100
Tmin = 1e-8 # mininum value of temperature
# 初始化所有分布
x = self.initX()
k = 500
y = 1000000 # 初始y值
xmin = [] # 记录数据值
ymin = 1000000
# 温度衰减系数
a = 0.95
n = 500
drawX = [i for i in range(500)]
drawY = []
while n > 0 and T > 0:
n-=1
for i in range(k):
y = self.aimFunction5(x)
xNew = self.genNewResult(x)
yNew = self.aimFunction5(xNew)
if(yNew <= y):
x = xNew.copy()
y = yNew
if(yNew < ymin):
xmin = x.copy()
ymin = yNew
else:
# p = 1 / (1 + math.exp(-(yNew - y) / T))
p = math.exp(-(yNew - y) / (T))
r = np.random.uniform(low=0, high = 1)
if (r < p):
x = xNew.copy()
y = yNew
drawY.append(y)
T = T * a
print('直接输出', x, self.aimFunction5(x))
print('记录最小数值', xmin, ymin)
return xmin, ymin, drawX, drawY def initX(self):
city_num = 29 # 不包括起始城市的序列
x = [i for i in range(1, city_num+1)]
random.shuffle(x)
if (self.SalesManNum == 1):
x.insert(random.randint(0, len(x)), 0)
elif(self.SalesManNum == 4):
x.insert(random.randint(0, len(x)), 0)
x.insert(random.randint(0, len(x)), 0)
x.insert(random.randint(0, len(x)), 0)
print('初始路线', x)
return x def genNewResult(self, res):
'''
res 就是 X 的值 T 温度越高产生翻转的概率越大 oldT 原本最大温度
'''
r = res.copy()
x = np.random.uniform(low= 0 , high= 1)
if x >= 0 and x < 0.4: # 使用交换法生成新的路径
# print('交换')
c1 = random.randint(0, len(r)-1)
c2 = random.randint(0, len(r)-1)
tmp = r[c1]
r[c1] = r[c2]
r[c2] = tmp
elif x >= 0.4 and x < 0.7: # 使用移动序列产生新路径
# print('移动')
c1 = random.randint(0, len(r) - 1)
c2 = random.randint(0, len(r) - 1)
c3 = random.randint(0, len(r) - 1)
tmp = [c1, c2, c3]
tmp.sort()
c1 = tmp[0]
c2 = tmp[1]
c3 = tmp[2]
tmp1 = r[0:c1]
tmp2 = r[c1:c2]
tmp3 = r[c2:c3]
tmp4 = r[c3:]
r = tmp1 + tmp3 + tmp2 + tmp4
else:
# print('倒置')
c1 = random.randint(0, len(r) - 1)
c2 = random.randint(0, len(r) - 1)
if c1 > c2:
tmp = c1
c1 = c2
c2 = tmp
tmp1 = r[0:c1]
tmp2 = r[c1:c2]
tmp3 = r[c2:]
tmp2.reverse()
r = tmp1 + tmp2 + tmp3
return r def solutionForSubjectOne(self):
T = 100 # initiate temperature
# 初始化所有分布
x = self.initX()
k = 500
y = 1000000 # 初始y值
xmin = [] # 记录数据值
ymin = 1000000
# 温度衰减系数
a = 0.95
# 绘图
drawX = [i for i in range(500)]
drawY = []
n = 500
while n > 0:
n-=1
for i in range(k):
y = self.aimFunction1(x)
# generate a new x in the neighboorhood of x by transform function ()
xNew = self.genNewResult(x)
yNew = self.aimFunction1(xNew)
if (yNew <= y):
x = xNew.copy()
y = yNew
if (yNew < ymin):
xmin = x.copy()
ymin = yNew
else:
p = math.exp(-(yNew - y) / T)
r = np.random.uniform(low=0, high=1)
if (r < p):
x = xNew.copy()
y = yNew
drawY.append(y)
T = T * a
print('直接输出', x, self.aimFunction1(x))
print('记录最小数值', xmin, ymin)
return xmin, drawX, drawY def solutionForSubjectTwo(self, res):
# 计算此字符串总距离
# 新增定义行走
sumDistance = 0
for i in range(len(res)):
lastPoint = res[i]
if (i + 1 >= len(res)):
nextPoint = res[0]
else:
nextPoint = res[i + 1]
x1 = self.myNodes[lastPoint].getX()
y1 = self.myNodes[lastPoint].getY()
x2 = self.myNodes[nextPoint].getX()
y2 = self.myNodes[nextPoint].getY()
sumDistance += haversine(x1, y1, x2, y2) T = sumDistance / self.moveSpeed
res.sort() # 当这个正序 生成的结果电量也是正序的
f = self.minEnergy
r = self.chargeRate
mA = []
mb = []
# 去除 DC 的影响
resul = []
for i in range(0, len(res)): # 默认res[0] = 0 的时候才能去除 不去除了
resul.append(res[i])
if len(resul) != 0:
for i in range(len(resul)):
tmp = []
for j in range(len(resul)):
if (i == j):
tmp.append(r / self.myNodes[resul[j]].getV())
else:
tmp.append(-1)
mA.append(tmp)
mb.append(T*r - (len(resul) - 1)*f + r / self.myNodes[resul[i]].getV() * f)
A = np.array(mA)
b = np.array(mb).T
re = np.linalg.solve(A,b) # 得到每一个的电池容量
return re def setScheme(self, minEnergy = 15, moveSpeed = 10, chargeRate = 20):
self.minEnergy = minEnergy
self.moveSpeed = moveSpeed
self.chargeRate = chargeRate def setCoef(self, consumeOneMeter = 0.0001, consumeOneMa = 1):
self.consumeOneMeter = consumeOneMeter
self.consumeOneMa = consumeOneMa

模拟退火解 深圳杯2020C题的更多相关文章

  1. # 深圳杯D题爬取电视收视率排行榜

    目录 深圳杯D题爬取电视收视率排行榜 站点分析 代码实现 深圳杯D题爬取电视收视率排行榜 站点分析 http://www.tvtv.hk/archives/category/tv 每天的排行版通过静态 ...

  2. Java实现UVA10131越大越聪明(蓝桥杯每周一题)

    10131越大越聪明(蓝桥杯每周一题) [问题描述] 一些人认为,大象的体型越大,脑子越聪明.为了反驳这一错误观点,你想要分析一组大象的数据,找出尽量 多的大象组成一个体重严格递增但 IQ 严格递减的 ...

  3. Python小白的数学建模课-A1.2021年数维杯C题(运动会优化比赛模式探索)探讨

    Python小白的数学建模课 A1-2021年数维杯C题(运动会优化比赛模式探索)探讨. 运动会优化比赛模式问题,是公平分配问题 『Python小白的数学建模课 @ Youcans』带你从数模小白成为 ...

  4. 2019-泰迪杯c题数据处理,WGS-84(世界标准地理坐标系) 转为 BD-09(百度地理坐标系)

    2019-泰迪杯c题数据处理,WGS-84(世界标准地理坐标系) 转为 BD-09(百度地理坐标系) 本次泰迪杯的数据为经纬度数据,并且题目给的是WGS-84(世界标准地理坐标系)格式的,所有如果调用 ...

  5. 蓝桥杯vip题阶乘计算

    蓝桥杯vip题阶乘计算 详细题目 输入一个正整数n,输出n!的值. 其中n!=123*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个 ...

  6. 【蓝桥杯真题】地宫取宝(搜索->记忆化搜索详解)

    链接 [蓝桥杯][2014年第五届真题]地宫取宝 题目描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被 ...

  7. Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)

    887. 鸡蛋掉落 你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑. 每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去. 你知道存在楼层 F ,满足 0 < ...

  8. java算法 蓝桥杯(题+答案) 方格填数

    6.方格填数  (结果填空) 如下的10个格子 (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案 ...

  9. 2019第十届蓝桥杯 E题 迷宫

    /*输入 30 50 01010101001011001001010110010110100100001000101010 00001000100000101010010000100000001001 ...

  10. 取球游戏_nyoj_518(博弈-蓝桥杯原题).java

    取球游戏 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 2   描述 今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下 ...

随机推荐

  1. Go 切片的扩容规则是怎么样的

    切片是动态数组,容量是根据元素动态增加的. 本来想看看源码怎么写的,发现切片追加元素的方法是内置的,看起来还挺麻烦 源码位于 builtin.go 中: // The append built-in ...

  2. apache/wampserver配置虚拟主机、多站点端口、允许通过ip访问

    虽然经常配置这个,但有时一着急想不起来,这里做个记录 步骤: 监听本网络本主机的端口 (Listen 0.0.0.0:端口号) 添加虚拟主机 VirtualHost 配置目录访问权限(Require ...

  3. js技术之获取当前元素的上一个/下一个兄弟级元素等元素的方法(获取上一个/下一个input)

    一.说明 jQuery获取: jQuery.parent(expr),找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span&q ...

  4. 爬虫入门(urllib与requests)

    urllib与requests 一.urllib的学习 学习目标 了解urllib的基本使用 1.urllib介绍 除了requests模块可以发送请求之外, urllib模块也可以实现请求的发送,只 ...

  5. Flutter开发的高效图片压缩工具:让APP更加丝滑

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  6. 2025第一届轩辕杯Misc详解

    Terminal Hacker 一步到位 flag{Cysay_terminal_game_hacked_successfully} 哇哇哇瓦 foremost分离 GekkoYoru 随波逐流检测, ...

  7. MySQL与Java 整型数据映射

    tinyint 占用1个字节,取值范围-128到127,映射成Java中的Integer类型:tinyint(1)用来表示boolean类型,0代表false,非0代表true,映射成Java中的Bo ...

  8. Visio画图心得

    关于Visio画图时的心得 1.关于对齐 我之前常常是在visio中视图里打开网格,然后根据网格来对齐框框,但是其实网格旁边的参考线用于对齐更好用. 首先,打开在视图选项卡里勾上参考线. 然后因为要根 ...

  9. maixpy 常用API整理

    2.openmvAPI整理 2.1 cmath - 复数的数学函数 cos cmath.cos(z) 返回z的余弦. exp cmath.exp(z) 返回z的指数. log cmath.log(z) ...

  10. ceph集群故障运维--持续更新

    一.PG处于异常状态active+undersized+degraded 部署环境: 自己搭建的3节点集群,集群共5个OSD,部署Ceph的RadosGW的服务时,副本默认设置为3,集群存放数据量少. ...