设有带时限作业排序实例, n = 7 , ( p0 , p1, ,¼,, p6 ) = (3, 5, 20,18,1, 6, 30) ,(d0 , d1, ,¼,, d6 ) = (1, 3, 4, 3, 2,1, 2) 。
时间: 2024-05-20 12:08:21 浏览: 166
这个问题属于作业调度问题中的一种,也叫做带时限作业排序问题。该问题的目标是在满足所有作业的截止时间的前提下,最大化完成的作业数量。根据贪心算法的思想,我们可以按照作业的收益(即完成该作业所得到的分数)从大到小排序,然后依次选择未被选择且截止时间最近的作业进行完成。
根据给定的数据,我们可以先将收益从大到小排序,得到 (p2, p3, p1, p5, p0, p6, p4) = (20, 18, 5, 6, 3, 30, 1)。接着,我们可以按照上述贪心算法的策略,依次选择作业。首先选择收益为20的作业p2,并将其分配到第4个时间段。然后选择收益为18的作业p3,并将其分配到第3个时间段。接下来选择收益为5的作业p1,并将其分配到第2个时间段。此时已经没有空闲时间段能够完成收益更高的作业了,因此只能选择收益为6的作业p5,并将其分配到第1个时间段。这样就完成了4个作业,得到了总分数为20+18+5+6=49分。
相关问题
调节以下代码,使得占空比在10%~60%之间可调: #include "stc32g.h" #include "intrins.h " void main() { EAXFR=1; CKCON =0x00; WTST= 0x00; P0M0 = 0x00; P0M1 = 0x00; P1M0= 0x00; P1M1= 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P4M0 = 0x00; P4M1 = 0x00; P5M0 = 0x00; P5M1= 0x00; PWMA_CCER1=0x00; PWMA_CCMR1 =0x60; //ÉèΪPWMģʽ PWMA_CCMR2 =0x60; //ÉèΪPWMģʽ PWMA_CCER1= 0x11; PWMA_CCR1H = 0x01; // Õ¼¿Õ±È1/3 PWMA_CCR1L= 0x00; PWMA_CCR2H = 0x02; // Õ¼¿Õ±È2/3 PWMA_CCR2L= 0x00; PWMA_ARRH= 0x03; //×ÜÖÜÆÚ PWMA_ARRL= 0x00; PWMA_ENO=0x05; //ʹÄÜPWM1ºÍ2 PWMA_PS=0x0A; //ÅäÖÃÊä³ö¹Ü½ÅΪP6 PWMA_BKR= 0x80; PWMA_CR1=0x01; while (1); }
要调节代码以实现占空比在10%~60%之间可调,需要修改以下部分:
```c
PWMA_CCR1H = 0x01; // Õ¼¿Õ±È1/3
PWMA_CCR1L = 0x00;
PWMA_CCR2H = 0x02; // Õ¼¿Õ±È2/3
PWMA_CCR2L = 0x00;
```
将上述代码修改为:
```c
PWMA_CCR1H = 0x00; // 将占空比调节为10%
PWMA_CCR1L = 0x0A;
PWMA_CCR2H = 0x00; // 将占空比调节为10%
PWMA_CCR2L = 0x0A;
```
这样可以将占空比调节为10%,你可以根据需要将占空比调整到60%。
if(ROW3==0) //¼õ { Display_Weight(); if(ROW3==0) { while(!ROW3) { key_press_num++; if(key_press_num>=100) { key_press_num=0; while(!ROW3) { if(GapValue>1) GapValue-=10; Buzzer=0; for(p=0;p<2;p++) Display_Weight(); Buzzer=1; for(p=0;p<2;p++) Display_Weight(); Get_Weight(); } } Display_Weight(); Delay_ms(8); } if(key_press_num!=0) { key_press_num=0; if(GapValue>1) GapValue--; Buzzer=0; for(p=0;p<10;p++) Display_Weight(); Buzzer=1; }
这是一个 C 语言程序段,其中包含了嵌入式系统中的按键检测和重量显示等功能。当按键 ROW3 被按下时,程序会先显示当前的重量,然后进入一个循环中,不断检测按键是否被松开。如果按键一直被按下,那么程序会不断累加一个名为 GapValue 的变量,同时通过蜂鸣器和数码管等方式提示用户。当按键松开后,程序会重新获取当前重量并显示在数码管上。如果按键 ROW3 被按下时,key_press_num 不等于 0,那么程序会将 key_press_num 清零,并且将 GapValue 减 1,并通过蜂鸣器和数码管等方式提示用户。最后,程序会重新获取当前重量并显示在数码管上。
阅读全文