过了,但是代码又臭又长,求改进

P1065 [NOIP2006 提高组] 作业调度方案

感觉改下变量名就可以优化很多吧。
by ScatteredHope @ 2023-11-05 19:54:40


( ```cpp #include<stdio.h> struct process{int machine;int cost_time;int end_time;};struct machine_process{int start_time;int end_time;int next_process;};int job_order[400];int done[20]={0};int occupied[20]={0};int heads[20]={0};struct process jobs[20][20];struct machine_process machines[20][400];int main(void){int m,n;scanf("%d %d",&m,&n);for(int i=0;i<m*n;++i){scanf("%d",&job_order[i]);}for(int i=0;i<n;++i){for(int j=0;j<m;++j){scanf("%d",&jobs[i][j].machine);}}for(int i=0;i<n;++i){for(int j=0;j<m;++j){scanf("%d",&jobs[i][j].cost_time);}}for(int i=0;i<m;++i){machines[i][0].start_time=0;machines[i][0].end_time=0;machines[i][0].next_process=-1;}for(int i=0;i<m*n;++i){int job=job_order[i]-1;int process=done[job]++;int machine=jobs[job][process].machine-1;int cost_time=jobs[job][process].cost_time;int end_time=(process-1>=0)?jobs[job][process-1].end_time:0;int tail=occupied[machine]++;int p=heads[machine];struct machine_process cur;cur.next_process=-1;cur.start_time=0;cur.end_time=0;machines[machine][tail]=cur;if(tail==0){machines[machine][tail].start_time=max(0,end_time);machines[machine][tail].end_time=machines[machine][tail].start_time+cost_time;jobs[job][process].end_time=machines[machine][tail].end_time;continue;}else if(machines[machine][p].start_time-(max(end_time,0))>=cost_time){machines[machine][tail].next_process=heads[machine];heads[machine]=tail;machines[machine][tail].start_time=max(0,end_time);machines[machine][tail].end_time=machines[machine][tail].start_time+cost_time;jobs[job][process].end_time=machines[machine][tail].end_time;continue;}while(p!=-1){int next_start=(machines[machine][p].next_process==-1)?1000000:machines[machine][machines[machine][p].next_process].start_time;int end=machines[machine][p].end_time;if(next_start-(max(end,end_time))>=cost_time){machines[machine][tail].next_process=machines[machine][p].next_process;machines[machine][p].next_process=tail;machines[machine][tail].start_time=max(end,end_time);machines[machine][tail].end_time=machines[machine][tail].start_time+cost_time;break;}p=machines[machine][p].next_process;}jobs[job][process].end_time=machines[machine][tail].end_time;}int max=0;for(int i=0;i<m;++i){int p=heads[i];while(machines[i][p].next_process!=-1){p=machines[i][p].next_process;}max=max(max,machines[i][p].end_time);}printf("%d",max);return 0;} ```
by RainPPR @ 2023-11-05 19:56:06


@[RainPPR](/user/371511) 6
by heyx0201 @ 2023-11-05 19:59:19


@[RainPPR](/user/371511) 纵向发展->横向发展(
by Jerry0905 @ 2023-11-05 20:04:37


@[RainPPR](/user/371511) C语言不能直接用max函数吧,我的编译器报错了
by milk2715093695 @ 2023-11-05 20:32:54


@[milk2715093695](/user/1096519) 那就加上 `#include<math.h>`
by RainPPR @ 2023-11-05 20:41:30


@[ScatteredHope](/user/654546) 哈6
by ly_magician @ 2024-02-11 22:06:59


|