问题标题: 酷町堂:1053

0
0
已解决
张睿杰
张睿杰
初级天翼
初级天翼
#include <iostream>
#include <algorithm>
using namespace std;
int a[100010],b[100010];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+1+n);
    if(n<=m)
    {
        cout<<a[n];
        return 0;
    }
    for(int i=1;i<=m;i++) b[i]=a[n-i+1];
    for(int i=n-m;i>=1;i--)
    {
        int max1=10000000,wz=0;
        for(int j=1;j<=m;j++)
        {
            if(max1>b[j])
            {
                max1=b[j];
                wz=j;
            }
        }
        b[wz]+=a[i];
    }
    int max2=0;
    for(int i=1;i<=m;i++) max2=max(max2,b[i]);
    cout<<max2<<endl;
    return 0;
}

10分代码

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

贪心思路


0
已采纳
赵逸凡
赵逸凡
初级启示者
初级启示者

重复定义max1,wz时间复杂度可能提升O(n/(n-m+1))左右,您的数组定义100010的长度,max1,wz会造成算法部分TLE....

我不相信这是难度0题

0
0
范子扬
范子扬
高级守护
高级守护

贪心可能过不了,要用搜索与回溯

0
毛润宇
毛润宇
新手天翼
新手天翼

抱歉大神,你做的题我看不懂……

我要回答