【思维】UVa 11729 Commando War

这里写图片描述

题意

有n个任务,每个人物需要安排B秒,需要执行J秒,被安排同一时间可以执行多个被安排的任务,但是同一时间智能安排一个任务。问怎样安排任务总时间最小。

思路

一开始的思路

一开始凭直觉感觉,这是一道排序题。
执行时间长的任务应该先执行,同时安排时间少的任务先安排。

后来标程的思路

无论安排时间长短,总安排时间是一定的,所以安排时间对于安排的先后顺序没有影响,而执行时间长的应该先执行。

这里写图片描述

AC代码
#include<bits/stdc++.h>
using namespace std;

typedef struct Poi
{
    int s,d;
    bool operator < (const Poi& a) const
    {
        return d > a.d;
    }
}poi;

void solve(void)
{
    int j = 0;
    int n;
    while(scanf("%d",&n),n)
    {
        vector<poi>p;
        for(int i = 0 ; i < n ; i++)
        {
            poi temp;
            scanf("%d%d",&temp.s,&temp.d);
            p.push_back(temp);
        }
        sort(p.begin(),p.end());
        int ans = 0;
        int maxx = 0;
        for(int i = 0 ; i < n ; i++)
        {
        ///更新安排时间,安排时间跟执行时间没关系,所以总安排时间也不用去管执行时间。
            ans += p[i].s;
            maxx = max(ans+p[i].d,maxx);///确定最长终结束时间
        }
        printf("Case %d: %d\n",++j,maxx);
    }
}

int main(void)
{
    solve();
    return 0;
}
相比起来……

没有考虑到无论怎么完成安排时间都相等,导致增加了代码量与运算量。

所能学到的

自定义比较方法的写法又再一次复习了一次。
sort函数重载<符号

typedef struct Poi
{
    int s,d;
    bool operator < (const Poi& a) const
    {
        return d > a.d;
    }
}poi;

猜你喜欢

转载自blog.csdn.net/peng0614/article/details/80990324
war