[2004年NOIP提高组] 合并果子
[2004年NOIP提高组] 合并果子
- 分析:根据题意,最先合并的果子加的次数最多,所以在每次合并时都要选取最小的两个进行,这就用到了排序算法,一开始给所有的果子从小到大排序,这里使用了快速排序,然后在每一次合并完最小的两个后,将合并完的数与剩余的数进行比较,在这里用1次冒泡,效率是最高的,在每次合并时设一个变量记录消耗的体力,最后输出。
-
#include<cstdio>
#include<iostream>
using namespace std;
int a[10001];
void quick(int l,int r)//快速排序
{
int i=l,j=r;
int mid=a[(l+r)/2];
if(i>=r) return;
while(i<=j)
{
while(a[i]<mid) i++;
while(a[j]>mid) j--;
if(i<=j)
{
swap(a[i],a[j]);
i++;j--;
}
}
quick(l,j);
quick(i,r);
}
int main()
{
int n,x,i,j,sum=0;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
quick(1,n);
for(i=1;i<n;i++)
{
x=a[i]+a[i+1];//合并最小的两个
sum+=x;
for(j=i+1;j<=n;j++)//1此冒泡进行排序
{
a[j]=a[j+1];//将前面已合并完空出的地方覆盖
if(x<a[j])//合并后的数小
{
a[j]=x;//将小数移到大数前面
break;
}
}
if(j>n) a[n]=x;//合并后的数最大 放在最右边
}
cout<<sum;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下