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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

最佳调度问题(搜索回溯)

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最佳调度问题(搜索回溯) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最佳調度問題 【問題描述】 假設有n個任務由k個可并行工作的機器完成。完成任務i需要的時間為ti。試設計一個算法找出完成這n個任務的最佳調度,使得完成全部任務的時間最早。 【編程任務】 對任意給定的整數n和k,以及完成任務i需要的時間為ti,i=1~n。編程計算完成這n個任務的最佳調度。 【輸入格式】 由文件machine.in給出輸入數據。第一行有2 個正整數n和k。第2 行的n個正整數是完成n個任務需要的時間。 【輸出格式】 將計算出的完成全部任務的最早時間輸出到文件machine.out。 【輸入樣例】 7? 3 2? 14? 4? 16? 6? 5? 3 【輸出樣例】 17 /*搜索問題我會先想每個小問題面臨的共同條件是什么,每加入一件任務,他加入的條件是什么?他要加入哪個機器?加入的條件是什么?時間怎樣最短?然后我就蒙圈了、、、我智障的想法是search(1,1)把第一個加入第一個機器,然后直到search(7,1)把第七個加入第一個,然后再加一個機器search(1,2)直到search(7,2)后來想想真是愚蠢吶,上網搜了一下、、 才明白...orz,search(int,int)里面的兩個參數一個表示加入的第幾個任務,另一個是現在的時間,所以search()里面是什么很重要,我發現這就比如前面的題目的效率問題,求最高的效率,search()里面也有一個參數代表效率,從0開始;還有著一個題注意剪枝,當這一種情況已經比之前找到的最小值大時這種情況就可以舍棄不用考慮了QWQ*/ #include<iostream> #include<cstdio> #include<cstdlib> using namespace std; int a[30],s[30]; int n,k,minn=0x7ffff; void search(int,int); int main() {scanf("%d%d",&n,&k);for(int i=1; i<=n; i++) //輸入每個時間scanf("%d",&a[i]);search(1,0);//加入第一個時間,現在花費的時間是0;cout<<minn;return 0; } void search(int x,int y) {if(y>=minn)return;//剪枝 已經比最小的大了就不用再放了,舍棄這種方法if(x>n) { //放完了進行判斷if(y<minn)minn=y;return;}for(int i=1; i<=k; i++) {if(s[i]+a[x]<=minn) { //剪枝s[i]+=a[x];search(x+1,max(y,s[i]));s[i]-=a[x];//回溯 }}return; }

?

轉載于:https://www.cnblogs.com/zzyh/p/6612514.html

總結

以上是生活随笔為你收集整理的最佳调度问题(搜索回溯)的全部內容,希望文章能夠幫你解決所遇到的問題。

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