m0_50934066 2023-08-19 14:04 采纳率: 96.1%
浏览 20
已结题

数字游戏,小明有一个数字num,初始值num=1

数字游戏
描述

小明有一个数字num,初始值:num=1。
现给出一个长度为n的序列s,对于序列的第i 个元素si​,小明可以进行下面的操作之一:

num = num+si;

num = num*si;
请求出num的最大值,并输出这个最大值除987654321的余数。

day10-01.zip

输入
第一行包含一个整数T(1≤T≤100)表示数据组数。

对于每组数据:

第一行包含一个整数n(1≤n≤10^5),表示序列的长度。

第二行包含n 个整数s1…sn(0≤si≤10^9)表示该序列。

输出
T行,每行一个整数表示结果

输入样例 1

3
2
1 1
1
0
1
987654321
输出样例 1

2
0
0

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-19 16:52
    关注

    【以下回答由 GPT 生成】

    首先,我们可以使用动态规划来解决这个问题。

    我们定义一个数组dp,其中dp[i]表示当num为i时的最大值。

    对于序列中的每个元素si,我们可以进行两种操作,即将num增加si或者将num乘以si。因此,对于每个元素si,我们需要计算两种操作分别对num的影响,并取其中的最大值。即:

    dp[i] = max(dp[i], dp[i+si] + 1)
    dp[i] = max(dp[i], dp[i * si] + 1)
    

    我们可以从左到右遍历序列s,依次更新dp数组中的元素。

    最后,我们需要找到dp数组中的最大值,并将其除以987654321取余数,即为所求的答案。

    下面是具体的代码实现:



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月27日
  • 已采纳回答 8月19日
  • 创建了问题 8月19日