找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
感激所有對伊莉作出奉獻的人伊莉需要你的贊助和支持儲值後自動升級用戶組
fc2vr名偵探柯七大罪mgmg 無碼自慰
爆肝工程偷拍護身術道sero 025小飛船大iris特務17

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

[繁][720P]海賊王1097

[繁]魔法科高中的劣等

(4月新番)[繁]無職轉

狂王.08

[繁]王者天下 第五季

蘇花改出口 希望被落
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 2287|回復: 7

[作業] 比賽的題目(求解)[複製鏈接]

Rank: 1

帖子
5508
積分
182 點
潛水值
22660 米
發表於 2012-6-19 04:45 AM|顯示全部樓層
本帖最後由 kiss94324 於 2012-6-19 05:00 AM 編輯

裁縫師的困擾
問題描述 : 裁縫師有 N 個工作要完成。並且知道每個工作需要幾個工作天才能完成且一天只能做一個工作。很不幸地,如果工作有延誤的話會有罰金,而且裁縫師也知道每個工作延誤一天所需要的罰金是多少。而延誤天數的計算方式為工作開始的那天往前算到今天(只有第一順位的工作沒有罰金)。  你的目標是撰寫程式來幫助裁縫師找到最低罰金的工作順序。  以第一組 Sample Input 為例:若裁縫師的工作順序為 4 3 2 1 ,那總罰金為: 0*5+5*2+(5+2)*1000+(5+2+1)*4 = 7042 。若順序改為 2 1 3 4 ,則總罰金為: 0*1000+1*4+(1+3)*2+(1+3+2)*5 = 42 。所以採用第二個順序被罰到較少的罰金(同時也是最少的罰金)。  
...
瀏覽完整內容,請先 註冊登入會員
附件: 你需要登錄才可以下載或查看附件。沒有帳號?註冊

使用道具檢舉

Rank: 2Rank: 2

帖子
566
積分
262 點
潛水值
16560 米
發表於 2012-6-19 03:35 PM|顯示全部樓層
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com
本帖最後由 zanelu2011 於 2012-6-19 03:36 PM 編輯

這裡提供演算法的部份,
程式輸出和輸入的部份,
請自行撰寫。


函式FindBest會列出所有的組合產生的罰款,
請依自己的需求修改。

附件: 你需要登錄才可以下載或查看附件。沒有帳號?註冊
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。

使用道具檢舉

帖子
28
積分
302 點
潛水值
16873 米
發表於 2012-6-22 05:06 PM|顯示全部樓層
若瀏覽伊莉的時侯發生問題或不正常情況,請使用Internet Explorer(I.E)。
(大大提供的答案應該是錯得吧...2143比2134付的少...但題意看得懂)
工作天數/罰款:
a   b
c   d
e   f
g   h
...(剩餘項目省略)
假如ab是優先完成項目而cd是第二玩程項目,那罰款式子會是:
d*a + f*(c+a) + h*(e+c+a).....
假如cd是優先完成項目而ab是第二完成項目而剩餘的項目次數不變(剩餘項目可以不變,因為這裡的目的只要比較第一與第二項,後面的項目順序是正確或錯誤並不影響比較,如果還是不理解,假定後面項目是正確的燃後反推試試),那罰款式子會變成:
...
瀏覽完整內容,請先 註冊登入會員
附件: 你需要登錄才可以下載或查看附件。沒有帳號?註冊
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。

使用道具檢舉

Rank: 2Rank: 2

帖子
566
積分
262 點
潛水值
16560 米
發表於 2012-6-24 12:12 PM|顯示全部樓層
kmes40505 發表於 2012-6-22 05:06 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

(大大提供的答案應該是錯得吧...2143比2134付的少...但題意看得懂)
工作天數/罰款:
a   b

工作2134
計算
...
瀏覽完整內容,請先 註冊登入會員
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。

使用道具檢舉

帖子
28
積分
302 點
潛水值
16873 米
發表於 2012-6-29 08:37 AM|顯示全部樓層
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。
zanelu2011 發表於 2012-6-24 12:12 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

工作2134
計算
0 * 1000 + 1 * 4 + (1+3) * 2 + (1+3+2) * 5 = 42

我猜是對的,但不知道出題的大大怎說




使用道具檢舉

帖子
160
積分
194 點
潛水值
14970 米
發表於 2012-6-30 10:25 AM|顯示全部樓層
本帖最後由 run0006 於 2012-7-1 03:54 AM 編輯
  1. ///////////////////////////////
  2. class WORK工作
  3. {
  4. public:
  5.    int order;//工作次序 :1~總工作量
  6.    int cost;//此工作需要天數
  7.    int forfeit;//罰款
  8.    int power;//權重
  9.    int rank;//排名 :1~總工作量
  10.    WORK(int order1,int cost1,int forfeit1,int power1,int rank1):order(order1),cost(cost1),forfeit
  11. (forfeit1),power(power1),rank(rank1){}
  12. };
  13. //全域變數
  14. int *sequence; //工作順序
  15. WORK **work;
  16. void method(int rank,int order)
  17. {
  18. if(work[order]->power >= work[sequence[rank]]->power )
  19. {
  20.   method(rank-1,work[sequence[rank]]->order);
  21.   sequence[rank]=work[order]->order;
  22. }
  23. else if(work[order]->power < work[sequence[rank]]->power )
  24. {
  25.   method(rank-1,order);
  26. }
  27. }
  28. int main()
  29. {
  30. //宣告變數

  31.     int intthis=0;    int last=0;

  32.     cin<<取得總工作量.......
  33. int 總工作量+1=..;
  34.    
  35.    //把資料放入WORK work[總工作量]的陣列
  36.    //初始化變數
  37.    work=new WORK*[總工作量+1];
  38. for(int i=1 ; i<總工作量+1 ; i++)
  39. {
  40.   sequence=0;
  41.   work[i]=new WORK(i,..,..,0,總工作量+1);  
  42. }
  43.   //程式開始
  44.   //找出power
  45.     for(int i=1;i<總工作量+1;i++)
  46.     {  
  47.         for(int j=1;j<總工作量+1;j++)
  48.         {
  49.             if(i!=j)
  50.             {
  51.                 intthis=work[i]->cost*work[j]->forfeit;
  52.                 if(intthis>last)
  53.     {
  54.      last=intthis;
  55.     }
  56.              }
  57.          }
  58.   work[i]->power=last;
  59.   last=0;
  60.     }
  61. //找出rank
  62. for(int i=0;i<總工作量+1;i++)
  63.     {  
  64.         for(int j=0;j<總工作量+1;j++)
  65.         {
  66.    if(i!=j)
  67.    {
  68.     if(work[i]->power>work[j].power)
  69.     {
  70.      work[i]->rank--;
  71.     }
  72.     if(sequence[work[i]->rank]!=0)
  73.     {
  74.      sequence[work[i]->rank]=work[i]->order;
  75.     }
  76.     else
  77.     {
  78.      method(work[i]->rank,work[i]->order);
  79.      //或者 用method(work[i]->rank,i);
  80.     }   
  81.    }
  82.   }
  83. }
  84. return 0;
  85. }
複製代碼

...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

帖子
160
積分
194 點
潛水值
14970 米
發表於 2012-6-30 12:37 PM|顯示全部樓層
本帖最後由 run0006 於 2012-6-30 12:48 PM 編輯

程式核心應該是排序大小的函式(method),不是這個問題,簡單講就是要比一串數列的大小。
而問題只是
把別人的罰金 乘上 自己的花費天數得到的power,
power越大代表要越早去完成(順序(rank)越前面),
了解這一點,
剩下的就是寫程式了。

我的做法是把每一個工作的power找出來,
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

帖子
160
積分
194 點
潛水值
14970 米
發表於 2012-6-30 12:43 PM|顯示全部樓層
zanelu2011 發表於 2012-6-24 12:12 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

工作2134
計算
0 * 1000 + 1 * 4 + (1+3) * 2 + (1+3+2) * 5 = 42

同意,理由是 工作1的罰金是3*5=15元,而工作4的罰金是4*4=16元,所以總罰金不會相等。...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部