本来是简单的贪心,第一遍交wa了,发现可能用int存不下。改用long long 还是wa,就郁闷了,又去仔细读题,才猛然发现自己写的更本就不“贪心”,或者说把关键的贪心环节漏掉了,每次得到一个值后,还应该再把这个值包括剩下的值再排一次序,改了之后才ac,对贪心的掌握还不是很好啊,没有深刻的理解。。。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAX 5100
using namespace std;
long long s[MAX];
int main()
{
long long n,i,j,t,help,sum;
while(scanf("%lld",&n)&&n)
{
sum=0;
for(i=0;i<n;i++)
scanf("%lld",&s[i]);
sort(s,s+n);
i=0,t=s[0];
for(i=0;i<n-1;i++)
{
s[i+1]=s[i]+s[i+1];
sum+=s[i+1];
for(j=i+2;j<n&&s[j]<s[j-1];j++)
{
help=s[j];
s[j]=s[j-1];
s[j-1]=help;
}
}
printf("%lld\n",sum);
}
return 0;
}