日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

任务安排

發布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 任务安排 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

N個任務排成一個序列在一臺機器上等待完成(順序不得改變),這N個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是Ti。在每批任務開始前,機器需要啟動時間S,而完成這批任務所需的時間是各個任務需要時間的總和(同一批任務將在同一時刻完成)。每個任務的費用是它的完成時刻乘以一個費用系數Fi。請確定一個分組方案,使得總費用最小。

例如:S=1;T={1,3,4,2,1};F={3,2,3,3,4}。如果分組方案是{1,2}、{3}、{4,5},則完成時間分別為{5,5,10,14,14},費用C={15,10,30,42,56},總費用就是153。

輸入輸出格式

輸入格式:
第一行是N(1<=N<=5000)。

第二行是S(0<=S<=50)。

下面N行每行有一對數,分別為Ti和Fi,均為不大于100的正整數,表示第i個任務單獨完成所需的時間是Ti及其費用系數Fi。

輸出格式:
一個數,最小的總費用。

輸入輸出樣例

輸入樣例#1:
5
1
1 3
3 2
4 3
2 3
1 4
輸出樣例#1:
153
.
.
.
.
.
.

分析

這道題采用動態規劃的思想,用f[i]表示完成前i個任務所需的最小費用,用tim[i]表示前i項任務所需的時間,用mon[i]表示前i項任務一共的費用系數。動歸式如下:

f[i]=min{f[j-1]+s*(mon[n]-mon[j-1])+
tim[i]*(mon[i]-mon[j-1])|1<=j<=i};

如果在完成第j項任務是啟動一次機器,后面的所有任務完成的時刻都要加上s,所以每啟動一次機器的費用為s*(mon[n]-mon[j-1]);
如果把第j項任務和第i項任務和在一起做,則它們的完成時刻為tim[i],所以費用為tim[i]*(mon[i]-mon[j-1])。
.
.
.
.
.
.

程序:
#include<iostream> #include<cstdlib> #include<cstdio> using namespace std; int f[5001],g[5001]; int len,wei,n,tim[5001],mon[5001],ti[5001],s; int main () {scanf("%d%d",&n,&s);for (int b=1;b<=n;++b){scanf("%d%d",&tim[b],&mon[b]);tim[b]+=tim[b-1];mon[b]+=mon[b-1];f[b]=2147483647;}for (int i=1;i<=n;++i)for (int j=1;j<=i;++j)f[i]=min(f[i],f[j-1]+s*(mon[n]-mon[j-1])+tim[i]*(mon[i]-mon[j-1]));printf("%d",f[n]);return 0; }

轉載于:https://www.cnblogs.com/YYC-0304/p/9499970.html

總結

以上是生活随笔為你收集整理的任务安排的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。