zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    vscode调试pomelo和pomelo使用vscode调试
    linux修改单个进程的系统时间
    python之路目录
    python之前端
    python之ORM操作
    python之redis和memcache操作
    python之消息队列
    python之协程与IO操作
    python之进程与线程
    python之网络编程
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/7745577.html
Copyright © 2011-2022 走看看