NYOJ 504 课程设计(贪心)

来源:互联网 发布:c语言创始人 编辑:程序博客网 时间:2024/05/22 01:14

OJ题目:click here~~

题意分析:要使得所选课程设计的时间差最小,贪心的思想,排序中位置越靠近,时间差越小。所以,对时间进行排序,然后枚举,选择距离最近的n个不同人的时间,这n个中,最后一个与第一个的时间差,就是本次选择的时间差。枚举,取最小值。

AC_CODE

struct Node{    int id;    int time;    Node(){}    Node(int i , int j ):id(i),time(j){}    friend bool operator<(const Node &A , const Node &B)//耗费的时间从小到大排序    {        return A.time < B.time;    }};Node x[2002];int f[202];int main(){    int t , n, m;    cin >> t;    while(t--)    {        scanf("%d%d",&n,&m);        memset(f , 0 , sizeof(f));        int i , j , k , a , b , t , minx = 1<<30;        k = 0;        for(i = 0;i < n;i++)            for(j = 0;j < m;j++)            {                scanf("%d",&a);                x[k++] = Node(i , a);            }        sort(x , x + k);//时间从小到大排序        for(i = 0;i < k;i++)        {            t = 0;            for(j = i;j < k;j++)            {                if(!f[x[j].id])                {                    f[x[j].id] = 1;                    t++;                }                if(t == n) break;//如果已经选中n个人,则本次选择结束            }            if(t == n && (x[j].time - x[i].time) < minx) minx = x[j].time - x[i].time;            memset(f , 0 , sizeof(f));        }        cout << minx << endl;    }    return 0;}


0 0
原创粉丝点击