24h購物| | PChome| 登入
2009-04-26 07:19:17| 人氣472| 回應0 | 上一篇 | 下一篇

NOIP2004 提高組 2.合并果子

推薦 0 收藏 0 轉貼0 訂閱站台

作法:Greedy
1.每次拿最小的兩個數加總
2.加總之後,丟回去排列,再拿最小的兩個數加總
3.持續上面兩個步驟即可

跟ACM 10954一樣

/**********************************************************/

#include<stdio.h>
#include<stdlib.h>
main()
{
 int n,m;
 while(scanf("%d",&n)==1&&n!=0)
   {
    short int number[20001]={0},mm=n;
     while(n--)
       {
        scanf("%d",&m);
        number[m]++;
       }
    int line[30001]={0};
    int a,b,c,top=0;
    for(a=1;a<=20000;a++)
     if(number[a]!=0)
      for(b=0;b<number[a];b++)
       {line[top]=a;top++;}
    int ans=0,sum,temp;
    mm=top ;
    for(a=0;a<mm-1;a++)
     {
      sum=line[a+1]+line[a];
      ans+=sum;
      line[a+1]+=line[a];
       for(b=a+1;b<mm-1;b++)
        if(line[b]>line[b+1]) {temp=line[b+1];line[b+1]=line[b];line[b]=temp;}
        else break;
     }
     printf("%d\n",ans);
   }
 return 0;
}

台長: 來源不明
人氣(472) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: 資訊競賽 |
此分類下一篇:95全國資訊學科能力決賽 4. 靈犬尋寶
此分類上一篇:2009 TOI 研習營初選 第四題:分房子

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文