题目要求把数组分成左右两个部分,代价为左右部分热度指数之和的乘积,自然的能想到用两个前缀和维护.prei表示前 i 本书热度指数之和.sufi表示第 i 本至第 n 本书的热度指数之和.处理完成之后枚举1至n−1,取min(prei∗sufi+1)即可 时间复杂度o(n)
#include <bits/stdc++.h>
using namespace std;
小图有一排共 n 本书,编号依次为 1 到 n,第 i 本书的热度指数为 ai。他打算将这排书分成前后两个连续的展示区,第一个区包含前 k(1≤k≤n−1)本书,第二个区包含其余书。定义这种划分的代价为第一个区所有书热度指数之和与第二个区所有书热度指数之和的乘积。小图希望找出所有可能划分中的最小代价。
书的本数 n 满足 2≤n≤106,每本书的热度指数 ai 满足 −103≤ai≤103。
第一行包含一个整数 n,表示书的本数。 第二行包含 n 个整数 a1,a2,…,an,依次表示每本书的热度指数,相邻整数之间用空格分隔。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.