独立任务调度问题

#include <stdio.h>  

#define n 6
int a[n] = {2, 5, 7, 10, 5, 2};
int b[n] = {3, 8, 4, 11, 3, 4}; 
int main()  
{  
    int sumA=0;  
    int result=1000000;  
    for(int i = 0; i < n; i++){  
    	sumA += a[i];
	}  
 	
	int t[sumA+1];	 
    for(int i = 0; i <= sumA; i++)  
        t[i]=0;  
  
    for (int k = 0; k < n; k++) {  
        for (int i = sumA; i >= 0; i--) {  
            if ( i >= a[k])  
            	t[i] = t[i] + b[k] < t[i-a[k]] ? t[i]+b[k] : t[i-a[k]];  
            else  
                t[i] = t[i] + b[k];  
        }  
    }  
  
    for(int i = 0; i <= sumA; i++)  
    {  
      int  k = i > t[i] ? i : t[i];  
        if(result > k)  
            result = k;  
    }  
    printf(" %d", result);  
  
    return 0;  
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验原理: 在独立任务调度问题中,每个任务都有一个执行时间和一个截止时间,任务之间没有任何依赖关系。任务调度的目标是在满足所有任务的截止时间的前提下,最大化已完成任务的数量。这是一个经典的NP完全问题,因此需要采用高效的算法来解决。 动态规划是一种重要的解决最优化问题的算法,可以用于解决独立任务调度问题。动态规划算法的基本思想是将问题分解成一系列重叠的子问题,并通过求解子问题的最优解来求解原问题的最优解。 解题步骤: 1. 确定状态:在独立任务调度问题中,状态可以用一个二元组(i, t)来表示,其中i表示任务的编号,t表示当前时间。 2. 确定状态转移方程:根据题目中的约束条件和目标函数,设计状态转移方程,用于计算每个状态的最优解。 3. 初始化状态:将第一个任务的状态作为初始状态,即(i, 0),其中i为第一个任务的编号,时间为0。 4. 递推求解:利用状态转移方程,从初始状态开始逐步计算每个状态的最优解,直到达到最终状态,即(n, T),其中n为任务数量,T为所有任务的最大截止时间。 5. 回溯求解:根据递推计算所得的最优解,回溯求解出每个任务的最优调度方案。 以上是解决独立任务调度问题的动态规划算法的基本步骤。需要根据具体情况进行算法的设计和实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值