24h購物| | PChome| 登入
2009-02-26 19:25:35| 人氣1,322| 回應4 | 上一篇 | 下一篇

2005 NPSC A. 誰先晚餐

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

Greedy的題目
排序越快,速度就越快!

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

#include<stdio.h>  
#include<stdlib.h>  
main()  
{  
 int cook[10000],eat[10000];  
 int a,b,c,n;  
 /*貪婪演算法*/ 
 /*讓吃得越久的人越早吃,這樣所有人就可以越早離開*/ 
 while(scanf("%d",&n)==1&&n!=0)  
  {  
    for(a=0;a<n;a++)  
     scanf("%d %d",&cook[a],&eat[a]);  
    for(a=0;a<n-1;a++)  
     {  
      c=a;
      for(b=a+1;b<n;b++)  
         if(eat[b]>eat[c]) c=b;
       int temp,temp1;  
        if(c!=a)  
         {  
          temp=eat[c];  
          temp1=cook[c];  
          eat[c]=eat[a];  
          cook[c]=cook[a];  
          eat[a]=temp;  
          cook[a]=temp1;  
         }  
     }   
    int max=0,left=0,time=0;  
    for(a=0;a<n;a++)   
     {  
      time=time+cook[a];  
      left=time+eat[a];  
      if(left>max) max=left;  
     }  
     printf("%d\n",max);  
  }  
 return 0;  
}

台長: 來源不明
人氣(1,322) | 回應(4)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: NPSC |
此分類下一篇:2006 NPSC B. 幼稚
此分類上一篇:2005 NPSC B. 惱人的零錢

路人
可以解釋依下最後的for迴圈嗎?~
2009-06-07 11:23:28
版主回應
int max=0,left=0,time=0;
for(a=0;a<n;a++)
{
time=time+cook[a];
left=time+eat[a];
if(left>max) max=left;
}
這個是找時間用的
上面就有歸0了 每次輸入就會重新宣告...
2009-06-07 16:53:45
一樣的路人
對了,,我發現 max,left,time沒歸零喔~
應該還要加上一行
max=0,left=0,time=0; 吧?
2009-06-07 11:45:29
路人
不是啦~我是說如果用 tioj 去跑的話~
2009-06-07 22:00:48
版主回應
TIOJ 我沒用過耶...
2009-06-07 22:39:53
路人
喔~沒是,,是我的編譯器不允許宣告在那~= =
2009-06-07 22:03:28
是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文