假设有n个任务由k个可并行工作的机器完成,完成任务i需要的时间为ti,对任意给定的整数n和k,以及完成任务i需要的时间ti,设计一个算法,求完成这n个任务的最佳调度,使得完成全部任务的时间最早。
第一行有2个正整数n和k,第二行有n个正整数,表示ti
n<7000,c<maxlongin
7 3
2 14 4 16 6 5 3
17
#include<bits/stdc++.h>using namespace std;long long n,m,a[7001],z[7001],ans=10000000000;inline void dfs(int k,long long zhi){ if(k==n) { ans=min(ans,zhi); return; } if(zhi>=ans) return; for(int i=0;i<m;i++) { if(z[i]+a[k]<=ans){ z[i]+=a[k]; dfs(k+1,max(zhi,z[i])); z[i]-=a[k]; } }}bool qwe(int a,int b){ return a>b;}int main(){ cin>>n>>m; for(int i=0;i<n;i++) { scanf("%d",&a[i]); } sort(a,a+n,qwe); dfs(0,0); cout<<ans;}原文:https://www.cnblogs.com/fanhao050109/p/11154185.html