问题标题: 酷町堂:2783 归并草垛

0
0
已解决
贾一凡
贾一凡
中级光能
中级光能

题目描述 Description

田地里有N垛稻草,现在农民伯伯要将这N垛稻草并成1垛运回家。

每一次合并,农民伯伯可以把两堆稻草合并到一起,消耗的体力等于两堆稻草的重量之和。可以看出,所有的稻草经过n-1次合并之后,就只剩下一堆了。农民伯伯在合并稻草时总共消耗的体力等于每次合并所耗体力之和。

因为还要花大力气把这些稻草运回家,所以农民伯伯在合并稻草时要尽可能地节省体力。现在给出每垛稻草的重量。请输出这个最小的体力耗费值。

输入描述 Input Description

第一行,一个整数,N
接下来一行,N个整数,每个整数表示每堆稻草的重量

输出描述 Output Description

农民伯伯最少花费的体力

样例输入 Sample Input

3

1 2 9

样例输出 Sample Output

15

数据范围及提示 Data Size & Hint

n≤100

 

Wrong Answer

#include<iostream>
#include<algorithm>
using namespace std;
int n,a[105],ans,sum;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+n+1);
    ans=a[1];
    for(int i=2;i<=n;i++){
        ans=ans+a[i];
        sum+=ans;
    }
    cout<<sum;
    return 0;
}

 

大佬们找错!

贾一凡在2022-07-21 08:51:18追加了内容

#include<iostream>
#include<algorithm>
using namespace std;
int n,a[105],ans,sum; 
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n-1;i++){
        sort(a+1,a+n+1);
        ans=a[1]+a[2];
        a[1]+=a[2];
        a[2]=0x3f3f3f3f;
    }
    cout<<ans;
    return 0;
}
 


0
已采纳
李显晨
李显晨
中级启示者
中级启示者
循环内部思路
循环从1~n-1{
     排序
     用ans把a[1]和a[2]加起来
     a[1]+=a[2]
     a[2]=0x3f3f3f3f//合并
}
最后输出ans

由于此题很水,直接在循环里排序即可

0
包思远
包思远
资深天翼
资深天翼

这题挺水,不像“合并石子”这题要用优先队列,直接在循环里sort即可【话说你的思路就要很大的问题】

0
崔子周
崔子周
高级天翼
高级天翼

定义 ans=0,a[101];

定义 n;

输入>>n;

循环(int i=1;i<=n;++i)

输入>>数组;

排序(a+1,a+n+1);

循环(int i=2;i<=n;++i) {

数组=a[i-1]+数组;

ans+=数组;

排序(a+i,a+n+1);

}

输出<<ans;

水**了,不会做?

我要回答