zoukankan      html  css  js  c++  java
  • nyoj 504 课程设计

    课程设计

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:2
    描述
    新学期伊始,Gangster 老师又在为如何给学生分配课程设计题目而犯愁,Gangster老师老共有 N 名学生和 M 个可选的题目,根据这些学生平时的表现,Gangster 老师精确计算出了每名学生完成各个课程设计题目所需的时间,现 Gangster 老师要给每名学生分配一个题目,使得最快完成课程设计同学所需的时间与最慢完成课程设计同学所需的时间的差最小。
    输入
    第一行给出正整数 T(1<=T<=10 ),表示共有 T 组测试数据,每组测试数据,首先给出两个正整数 N(0<N<=200),M( 0<M<=10),接下来给出 N 行,每行包含 M 个正整数,第 i 行的第 j 个正整数代表第 i 名同学完成第 j 个课程设计所需的时间 p ( 0<=p<=1000 )。
    输出
    对于每组测试数据,单行输出最小差值。
    样例输入
    2
    3 4
    2 4 5 8
    6 2 1 9
    4 6 8 5
    2 3
    1 2 3
    10 12 10
    样例输出
    1
    7
    感觉可以看成是贪心的一种,参考了别人的代码,顺便解释下
     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<cstdio>
     5 using namespace std;
     6 bool vis[210];
     7 struct Node 
     8 {
     9     int x ,y;
    10 }node[2200];
    11 bool cmp(struct Node x ,struct Node y)
    12 {
    13     return x.x<y.x;
    14 }
    15 int solve(int n,int m)
    16 {
    17     int i,j ,temp,temp1, ans;
    18       ans=999999999;
    19      for(i=0;i<n;i++)
    20      {   
    21          temp=1;
    22          memset(vis,false,sizeof(vis));
    23          vis[node[i].y]=true;   //每个数上都有标记
    24          for(j=i;j<n;j++)
    25          {
    26              if(!vis[node[j].y])//如果该行还没有选
    27              {
    28                  temp++;        //选出一行
    29                  vis[node[j].y]=true;
    30                 if(temp==m)     //如果正好够m个了,则拿最大的减去最小的,得到最小的
    31                  {
    32                      if((node[j].x-node[i].x)<ans)
    33                      {
    34                          ans=node[j].x-node[i].x;
    35                      }
    36                      break;
    37                  }
    38              }
    39          }
    40      }
    41     return ans;
    42 }
    43 int main()
    44 {
    45     int T ,n, m;
    46     cin>>T;
    47     while(T--)
    48     {
    49         cin>>n>>m;
    50         int temp=0;
    51         for(int i=1; i<=n; i++)
    52         {
    53             for(int j=0;j<m;j++)
    54             {
    55                 cin>>node[temp].x;     //对所有的进行排序
    56                 node[temp++].y=i;     //并标记所在的行
    57             }
    58         }
    59         sort(node,node+temp,cmp);    //对所有的进行排序
    60         cout<<solve(temp,n)<<endl;
    61     }
    62     return 0;
    63 }
  • 相关阅读:
    使用SQL语句创建SQL数据脚本(应对万网主机部分不支持导出备份数据)
    js和jquery页面初始化加载函数的方法及先后顺序
    熔断器原理
    List<T>线性查找和二分查找BinarySearch效率分析
    ASP.NET资源大全-知识分享 【转载】
    C#语法——委托,架构的血液
    SUPERSOCKET 客户端
    VS 中的几种注释方法
    计算机专业术语中英文对照
    2018服务端架构师技术图谱
  • 原文地址:https://www.cnblogs.com/lovychen/p/3585244.html
Copyright © 2011-2022 走看看