- 最後登錄
- 2021-5-15
- 在線時間
- 0 小時
- 註冊時間
- 2011-11-4
- 閱讀權限
- 20
- 精華
- 0
- UID
- 10499858
- 帖子
- 160
- 積分
- 194 點
- 潛水值
- 14970 米
| 本帖最後由 run0006 於 2012-7-1 03:54 AM 編輯
- ///////////////////////////////
- class WORK工作
- {
- public:
- int order;//工作次序 :1~總工作量
- int cost;//此工作需要天數
- int forfeit;//罰款
- int power;//權重
- int rank;//排名 :1~總工作量
- WORK(int order1,int cost1,int forfeit1,int power1,int rank1):order(order1),cost(cost1),forfeit
- (forfeit1),power(power1),rank(rank1){}
- };
- //全域變數
- int *sequence; //工作順序
- WORK **work;
- void method(int rank,int order)
- {
- if(work[order]->power >= work[sequence[rank]]->power )
- {
- method(rank-1,work[sequence[rank]]->order);
- sequence[rank]=work[order]->order;
- }
- else if(work[order]->power < work[sequence[rank]]->power )
- {
- method(rank-1,order);
- }
- }
- int main()
- {
- //宣告變數
- int intthis=0; int last=0;
- cin<<取得總工作量.......
- int 總工作量+1=..;
-
- //把資料放入WORK work[總工作量]的陣列
- //初始化變數
- work=new WORK*[總工作量+1];
- for(int i=1 ; i<總工作量+1 ; i++)
- {
- sequence=0;
- work[i]=new WORK(i,..,..,0,總工作量+1);
- }
- //程式開始
- //找出power
- for(int i=1;i<總工作量+1;i++)
- {
- for(int j=1;j<總工作量+1;j++)
- {
- if(i!=j)
- {
- intthis=work[i]->cost*work[j]->forfeit;
- if(intthis>last)
- {
- last=intthis;
- }
- }
- }
- work[i]->power=last;
- last=0;
- }
- //找出rank
- for(int i=0;i<總工作量+1;i++)
- {
- for(int j=0;j<總工作量+1;j++)
- {
- if(i!=j)
- {
- if(work[i]->power>work[j].power)
- {
- work[i]->rank--;
- }
- if(sequence[work[i]->rank]!=0)
- {
- sequence[work[i]->rank]=work[i]->order;
- }
- else
- {
- method(work[i]->rank,work[i]->order);
- //或者 用method(work[i]->rank,i);
- }
- }
- }
- }
- return 0;
- }
複製代碼
... |
|