题目
解题思路
一道看起来不难的题目,用贪心试着拿部分分。结果合并果子的源程序竟然可以AC,让人惊讶! 当然,也不能是没有任何道理的。转载一份博客,供大家参考
代码(合并果子的源程序)
#include<cstdio>
using namespace std;
int n,num,u,ans,a[100001];
void up(int x)
{
int t;
while (x>1&&a[x]<a[x/2])
{
t=a[x/2]; a[x/2]=a[x]; a[x]=t;
x/=2;
}
}
void down(int x)
{
int y,t;
while ((a[x*2]<a[x]&&x*2<=num)||a[x*2+1]<a[x]&&x*2+1<=num)
{
y=x*2;
if (a[y+1]<a[x*2]&&x<=num) y++;
t=a[y]; a[y]=a[x]; a[x]=t;
x=y;
}
}
void insert(int x)
{num++; a[num]=x; up(num);}
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
{scanf("%d",&u);insert(u);}
while (num!=1)
{
u=0;
u+=a[1];
a[1]=a[num];
num--;
down(1);
u+=a[1];
a[1]=a[num];
num--;
down(1);
insert(u);
ans+=u;
}
printf("%d",ans);
}