• 【3-1】独立任务最优调度问题


    ´问题描述:
    用 2 台处理机 A 和 B 处理 n 个作业。设第 i 个作业交给机器 A 处理时需要时间 i
    a ,若
    由机器 B 来处理,则需要时间 i
    b 。由于各作业的特点和机器的性能关系,很可能对于某些 i,
    有 i i
    a ³ b ,而对于某些 j,j≠i,有a j < bj 。既不能将一个作业分开由 2 台机器处理,也
    没有一台机器能同时处理 2 个作业。设计一个动态规划算法,使得这 2 台机器处理完这 n
    个作业的时间最短(从任何一台机器开工到最后一台机器停工的总时间)。研究一个实例:
    (a1,a2,a3,a4,a5,a6)=(2,5,7,10,5,2);(b1,b2,b3,b4,b5,b6)=(3,8,4,11,3,4)。
    ´编程任务:
    对于给定的 2 台处理机 A 和 B 处理 n 个作业,找出一个最优调度方案,使 2 台机器处理
    完这 n 个作业的时间最短。
    ´数据输入:
    由文件 input.txt 提供输入数据。文件的第 1 行是 1 个正整数 n, 表示要处理 n 个作业。
    接下来的 2 行中,每行有 n 个正整数,分别表示处理机 A 和 B 处理第 i 个作业需要的处理时
    间。
    ´结果输出:
    程序运行结束时,将计算出的最短处理时间输出到文件 output.txt 中。
    输入文件示例 输出文件示例
    input.txt output.txt
    6
    2 5 7 10 5 2
    3 8 4 11 3 4
    15

    【题解】

    设f[i][j]表示前i个作业A机器用了j时间的条件下B最少花费的时间 f[i][j] = min(f[i-1][j-a[i]],f[i-1][j]+b[i]);//给A做或给B做

    【代码】

    /*
        设f[i][j]表示前i个作业A机器用了j时间的条件下B最少花费的时间
        f[i][j] = min(f[i-1][j-a[i]],f[i-1][j]+b[i]);//给A做或给B做
    */
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    const int N = 200;
    const int M = 1e4;
    
    int f[N+10][M+10];
    int n,a[N+10],b[N+10];
    
    int main(){
    
        freopen("C://Users//Administrator//Desktop//测试数据//ch3//prog31//test//sched10.in","r",stdin);
        scanf("%d",&n);
        for (int i = 1;i <= n;i++) scanf("%d",&a[i]);
        for (int i = 1;i <= n;i++) scanf("%d",&b[i]);
        memset(f,0x3f3f3f3f,sizeof f);
        f[0][0] = 0;
        for (int i = 1;i <= n;i++)
            for (int j = 0;j <= M;j++){
                if (j>=a[i]) f[i][j] = min(f[i][j],f[i-1][j-a[i]]);
                f[i][j] = min(f[i][j],f[i-1][j]+b[i]);
            }
        int ans = f[n][0];
        for (int j = 1;j <= M;j++) ans = min(ans,max(f[n][j],j));
        printf("%d
    ",ans);
        return 0;
    }
    
    
  • 相关阅读:
    使用纯资源DLL文件实现多语言菜单、界面文字、Tooltips等[转]
    用VC++打造有多语言菜单的应用程序[转]
    VC2008以资源形式实现多语言版本[转]
    GetWindowRect与GetClientRect 的区别[转]
    MFC拆分窗口及它们之间的数据交换[转]
    【排序算法】(7)快速排序
    【排序算法】(4)归并排序
    【排序算法】(3)插入排序
    【排序算法】(8)希尔排序
    【排序算法】(2)冒泡排序
  • 原文地址:https://www.cnblogs.com/AWCXV/p/11660111.html
Copyright © 2020-2023  润新知