首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >高效优化的算法

高效优化的算法
EN

Stack Overflow用户
提问于 2019-07-12 02:28:28
回答 1查看 82关注 0票数 0

我正在尝试制定优化每日任务计划的算法。例如:

代码语言:javascript
复制
1. There are 16 tasks to finish in one day, expirience worker can finish 8 tasks and newer worker could finish 4 tasks. As output we should get 2 expirienced worker and none new worker.

现在我有这段代码,但它不能正常工作:

代码语言:javascript
复制
private void calculate(int numberOfTasks, int oldWorkerValue, int youngWorkerValue) {

    int numberOfOldWorkers = numberOfTasks / oldWorkerValue;
    int numberOfYoungWorkers = 0;

    if(numberOfOldWorkers == 0) {
        numberOfOldWorkers = 1;
    } else {
        numberOfYoungWorkers = (numberOfTasks % numberOfOldWorkers) / youngWorkerValue;

        if(numberOfTasks % oldWorkerValue != youngWorkerValue*numberOfYoungWorkers) {
            numberOfYoungWorkers = numberOfYoungWorkers + 1;
        }
    }
    System.out.println("Expirienced worker: " + numberOfOldWorkers + " and new workers: " + numberOfYoungWorkers);
}

它返回了工人的数量,但它并不像它应该的那样工作。我没有像我在这几个例子中写的那样得到结果。你能给我一些建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-12 02:59:54

我不确定你是否能找到确切的公式,所以我会做简单的蛮力:

代码语言:javascript
复制
public static Pair<Integer, Integer> calculate(int numberOfTasks, int oldWorkerValue, int youngWorkerValue) {
    int m = Integer.MAX_VALUE; // minimal value
    int o = 0; // old workers
    int n = 0; // new workers
    for (int i = 1; i <= (int)Math.ceil((double) numberOfTasks / oldWorkerValue); i++) {
        int nw = (int) Math.ceil((double)(numberOfTasks - i * oldWorkerValue) / youngWorkerValue);
        if (nw < 0) nw = 0;
        int tm = i * oldWorkerValue + nw * youngWorkerValue;
        if (tm < m) {
            m = tm; o = i; n = nw;
        }
    }
    return new Pair<>(o, n); // pair <old workers, new workers>
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56995322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档