• Wannafly挑战赛2 Cut


    题目描述

    给你一个长度为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 }
  • 相关阅读:
    51nod1376 最长递增子序列的数量
    51nod1201 整数划分
    51nod1202 子序列个数
    51nod 博弈论水题
    51nod1052 最大M子段和
    51nod1678 lyk与gcd
    51nod1262 扔球
    BZOJ2763, 最短路
    吃西瓜 最大子矩阵 三维的。 rqnoj93
    noip2015 信息传递 强连通块
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/7745577.html
Copyright © 2020-2023  润新知