问题

思路
这个题给的提示就是第二题上来一定要先写暴力,不要直接上其他想法,要不然思路容易跑偏。。。哎就差一点点就拿满了……
这里写完暴力之后得70分,那就是后面优化的问题,里面读数据不能优化,那就优化后面的搜索
这里的搜索实质上是在搜索一个合适的天数,可以注意到这个天数有一个很明显的分界的状态,左侧和右侧区分很明显,这样就可以用二分查找来优化
代码
70
一定先写暴力解法
n,m,k = map(int,input().split())
# 区域总数 资源数量 最少天数
need_days = [0]*n
need_source = [0]*n
max_day,min_day = 0,k
for i in range(n):
t,c = map(int,input().split())
need_days[i],need_source[i] = t,c
max_day = max(max_day,t)
min_day = min(min_day,t)
for day in range(min_day,max_day+1):
source = m
for i in range(n):
if need_days[i]>day:
source-=need_source[i]*(need_days[i]-day)
if source>=0:
print(day)
break
100分代码
在遍历里面卡值->用二分
n,m,k = map(int,input().split())
# 区域总数 资源数量 最少天数
need_days = [0]*n
need_source = [0]*n
max_day,min_day = 0,k
for i in range(n):
t,c = map(int,input().split())
need_days[i],need_source[i] = t,c
max_day = max(max_day,t)
min_day = min(min_day,t)
l,r = min_day,max_day+1
# for day in range(min_day,max_day+1):
while l<r:
day = (l+r)//2
source = m
for i in range(n):
if need_days[i]>day:
source-=need_source[i]*(need_days[i]-day)
if source>=0:
r = day
else:
l=day+1
print(l)
文章讲述了在解决一个资源分配问题时,首先采用暴力解法获取基础分数,然后通过二分查找进行优化,以减少搜索天数,提高效率。关键在于识别问题中分界明显的状态,从而应用二分查找策略。
660

被折叠的 条评论
为什么被折叠?



