数字游戏
描述
小明有一个数字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
【以下回答由 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取余数,即为所求的答案。
下面是具体的代码实现:
【相关推荐】
数字游戏
描述
小明有一个数字num,初始值:num=0。
现给出一个长度为n的序列s,对于序列的第i 个元素si?,小明可以进行下面的操作之一:
num = num+si;
num = num*si;
请求出num的最大值,并输出这个最大值除987654321的余数。
输入
第一行包含一个整数T(1≤T≤100)表示数据组数。
对于每组数据:
第一行包含一个整数n(1≤n≤10^5),表示序列的长度。
第二行包含n 个整数s1…sn(0≤si≤10^9)表示该序列。
输出
T行,每行一个整数表示结果