码迷,mamicode.com
首页 > 其他好文 > 详细

Wannafly挑战赛2 Cut

时间:2017-10-27 23:48:25      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:挑战   子序列   turn   ++   space   最大   class   ...   style   

题目描述

给你一个长度为n的序列,你每次可以将一个序列分割成两个连续的的子序列,
分割的代价为原序列的总和。
现在允许你在初始时将序列重新排列一次。
问分割成n个长度为1的序列的最大总代价是多少?

输入描述:

第一行一个数n表示原序列的长度;
接下来一行n个数a_i表示原序列的第i个数。
2<=n<=100000
0<=a_i<=10000

输出描述:

一行一个整数表示答案。
示例1

输入

4
3 2 4 1

输出

26

说明

[3,2,4,1]重排->[1,2,3,4]->[1],[2,3,4]->[1],[2],[3,4]->[1],[2],[3],[4]。
示例2

输入

4
1 1 1 1

输出

9

不难看出答案就是从小到大排序后a1*1+a2*2+...+an-1*(n-1)+an*(n-1).
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N = 100000;
 4 #define ll long long
 5 int a[N];
 6 int main() {
 7     int n;
 8     cin >> n;
 9     for(int i = 1; i <= n; i ++) cin >> a[i];
10     sort(a + 1, a + 1 + n);
11     ll sum = 0;
12     for(int i = 1; i <= n; i ++) {
13         sum += 1LL*i*a[i];
14     }
15     cout << sum - a[n]<< endl;
16     return 0;
17 }

 

Wannafly挑战赛2 Cut

标签:挑战   子序列   turn   ++   space   最大   class   ...   style   

原文地址:http://www.cnblogs.com/xingkongyihao/p/7745577.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!