【日志首次上报积分最多】

 题目描述

【日志首次上报最多积分】

日志采集是运维系统的的核心组件。日志是按行生成,每行记做一条,由采集系统分批上报。

如果上报太频繁,会对服务端造成压力;如果上报太晚,会降低用户的体验;

如果一次上报的条数太多,会导致超时失败。为此,项目组设计了如下的上报策略:

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))

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值