zoukankan      html  css  js  c++  java
  • Stone(思维)

    链接:https://ac.nowcoder.com/acm/contest/893/D
    来源:牛客网

    题目描述

    有n堆石子排成一排,第i堆石子有aiai个石子。
    每次,你可以选择任意相邻的两堆石子进行合并,合并后的石子数量为两堆石子的和,消耗的体力等价于两堆石子中石子数少的那个。
    请问,将所有的石子合并成一堆,你所消耗的体力最小是多少?

    输入描述:

    第一行是一个整数T(1T20)T(1≤T≤20),表示样例的个数。
    每个样例的第一行是一个整数n(1n10000)n(1≤n≤10000),表示石子堆的数量。
    第二行是n个整数ai(1ai109)ai(1≤ai≤109)

    输出描述:

    每行输出一个样例的结果。
    示例1

    输入

    复制
    2
    2
    1 2
    1
    1
    

    输出

    复制
    1
    0
    

    说明

    巨大的输入,请使用C风格的输入。
    思路:把最大的一堆挑出,其余求和
    代码:
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #include<set>
    #include<vector>
    #include<map>
    #include<cmath>
    const int maxn=1e5+5;
    typedef long long ll;
    using namespace std;
    
    int main()
    {
    
       int T;
       cin>>T;
       while(T--)
       {
           int n;
           cin>>n;
           ll sum=0;
           int maxx=0;
           int x;
           for(int t=0;t<n;t++)
           {
               scanf("%d",&x);
               sum+=x;
               maxx=max(maxx,x);
        }
        printf("%lld
    ",sum-maxx);
       }
       return 0;
    }
  • 相关阅读:
    友链
    P2572 [SCOI2010]序列操作
    「THP3考前信心赛」解题报告
    DP中的树上边/点覆盖问题
    P3413 SAC#1
    luoguP6754 [BalticOI 2013 Day1] Palindrome-Free Numbers
    睿智错误
    常见套路?
    奇怪的点子
    最近做过一些比较好的题
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10816773.html
Copyright © 2011-2022 走看看