D


私信TA

用户名:ALS1111

访问量:19495

签 名:

等  级
排  名 51
经  验 10951
参赛次数 0
文章发表 132
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

python-巧克力
浏览:238
python-2^k进制数
浏览:314
python-能量项链
浏览:206

解题思路:

引用作者:https://blog.dotcpp.com/a/67057

观察题目,假如相邻的两个珠子,前面的珠子头坐标为m,尾坐标为r,后一个珠子头坐标为r,尾坐标为n。合并后保留了m和n,删除了r,之后r再也不能被使用,而m和n还可以在后续的合成中继续使用。

如果我们任意合并,在每次合并时都会删去一个r。如果我们删去的r是一个较大的值,那么意味着r被删除之后就再也不能参与到之后合并珠子时进行相乘的结果了。

要想得到最大的合并能量的结果,我们就要尽可能的保证较大的数能尽可能的参与到更多的珠子合并当中,而较小的数尽量较少的参与到珠子的合并当中。

那么解题方法就出现了。我们在每次合并时,我们都先删除掉数组中最小的r,直到合并到最后。这样就能得出最后的结果。


注意事项:

参考代码:

def f(n):  
    A = [int(i) for i in input().strip().split()]  
  
    ans = 0  
    for i in range(n-1):  #n颗珠子,需要合并n-1次
        min_index = A.index(min(A))  
  
        if min_index == len(A)-1:  
            ans = ans + A[min_index-1]*A[min_index]*A[0]  
        elif min_index == 0:  
            ans = ans + A[-1]*A[min_index]*A[min_index+1]  
        else:  
            ans = ans + A[min_index-1]*A[min_index]*A[min_index+1]  
  
        del(A[min_index])  
  
    print(ans)  
  
if __name__ == '__main__':  
    n = int(input())  
    f(n)


 

0.0分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区