首页 > 其他 > 详细

UVA11729 Commando War

时间:2016-08-05 01:02:54      阅读:171      评论:0      收藏:0      [点我收藏+]

问题链接:UVA11729 Commando War

问题简述:有n个部下需要完成一项任务,给第i个部下交代任务需要Bi时间,执行任务需要Ji时间,要求尽早完成任务,请输出最后完成任务需要的最小总时间。

这个问题是一个典型的贪心法问题,求完成任务的最短时间。用C++编程比较方便。

程序中,比起用结构表示,每一项任务用一个类对象表示,程序处理起来比较方便,所以实现了一个简单的类job。

排序时,任务J按时间从大到小执行,可以得到最短的完成任务时间。但是,如果任务的时间相同,应该让交代任务时间较短的任务优先执行。

AC通过的C++语言程序如下:

/* UVA11729 Commando War */

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>

using namespace std;

const int MAXN = 10000;

class job {
public:
    int b, j;

    job(int b, int j):b(b), j(j){}

    bool operator < (const job& r) const {
        return (j == r.j) ? b < r.b : j > r.j;
    }
};

vector<job> myjob;

int main()
{
    int n, b, j, caseno=0;

    while(scanf("%d", &n) != EOF && n != 0) {
        myjob.clear();

        for(int i=0; i<n; i++) {
            scanf("%d%d", &b, &j);
            myjob.push_back(job(b, j));
        }

        sort(myjob.begin(), myjob.end());

        int sum = 0, ans = 0;
        for(int i=0; i<n; i++) {
            sum += myjob[i].b;
            ans = max(ans, sum + myjob[i].j);
        }

        printf("Case %d: %d\n", ++caseno, ans);
    }

    return 0;
}


UVA11729 Commando War

原文:http://blog.csdn.net/tigerisland45/article/details/52108494

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!