0
已解决
刘斐
高级守护
高级守护
1053 最佳调度问题
题目描述 Description
假设有n个任务由k个可并行工作的机器完成。完成任务i需要的时间为ti。试设计一个算法找出完成这n个任务的最佳调度,使得完成全部任务的时间最早。 对任意给定的整数n和k,以及完成任务i需要的时间为ti,i=1~n。编程计算完成这n个任务的最佳调度。
输入描述 Input Description
第一行有2 个正整数n和k。第2 行的n个正整数是完成n个任务需要的时间。
输出描述 Output Description
计算出的完成全部任务的最早时间
样例输入 Sample Input
7 3
2 14 4 16 6 5 3
样例输出 Sample Output
17
#include<iostream>
using namespace std;
int n,k,minv=1000010,time[10010];
int jq[10010];
void dfs(int t,int s) {
if(minv<=s) return;
if(t>n)
{
if(minv>s)
{
minv=s;
}
return;
}
for(int i=1;i<=k;i++)
{
if(jq[i]+time[t]<minv)
{
jq[i]+=time[t];
dfs(t+1,(s>jq[i]?s:jq[i]));
jq[i]-=time[t];
}
}
return;
}
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>time[i];
}
dfs(1,0);
cout<<minv;
return 0;
}
请求各位大神帮帮忙!
0
已采纳
黄俊博
资深光能
资深光能
刘斐,time是C++关键字,我也被坑过,改成time1试试看。
望采纳,谢谢。
黄俊博在2018-01-30 20:28:42追加了内容
但你的程序7,8,10超时,所以要剪枝,就是,如果当前值已经大于最优解,就不需要执行了。。
黄俊博在2018-01-31 08:32:04追加了内容
就是,如果当前值已经大于最优解,就不需要执行了。。
0
0
0
0