【日志首次上报积分最多】
题目描述
【日志首次上报最多积分】
日志采集是运维系统的的核心组件。日志是按行生成,每行记做一条,由采集系统分批上报。
如果上报太频繁,会对服务端造成压力;如果上报太晚,会降低用户的体验;
如果一次上报的条数太多,会导致超时失败。为此,项目组设计了如下的上报策略:
1、每成功上报一条日志,奖励1分 2、每条日志每延迟上报1秒,扣1分 3、积累日志达到100条,必须立即上报
给出日志序列,根据该规则,计算首次上报能获得的最多积分数。
输入描述
按时序产生的日志条数 T1,T2…Tn,其中 1<=n<=1000,0<=Ti<=100
输出描述
首次上报最多能获得的积分数
题目解析
有前后依赖关系的一般都是动态规划。本题其实不难,主要是根据案例理解题目的意思。
1.总分不超100时,每次提交都要将全部数据加起来在减去因延迟提交而扣掉的分数
2.总分超过100时,就用100去减因延迟提交而扣掉的分数
python代码一:
s = list(map(int,input().split( ))) l = [] for i in range(len(s)): val = 0 rs = s[0:i + 1][::-1] if sum(s[0:i + 1]) <= 100: val += sum(s[0:i + 1]) for j in range(i+1): val -= j*rs[j] l.append(val) else: val = 100 for j in range(i+1): val -=j*rs[j] l.append(val) break print(max(l))
python代码二:动态规划dp
l = list(map(int,input().split( ))) n = len(l) zscore = [0] * n#得分列表 fscore = [0] * n#减分列表 score = [0] * n#最终得分列表 #初始化值 zscore[0] = l[0] score[0] = l[0] for i in range(1,n): zscore[i] = min(100,zscore[i-1]+l[i]) fscore[i] = fscore[i-1] + l[i-1] score[i] = zscore[i] - fscore[i] if zscore[i] == 100:#达到100次必须上报,结束循环 break print(max(score))
下一篇:
【网上商城优惠活动】