题目详情:
有n个人,m种技能,每个人学会某项技能都需要一定的时间。每个人可以选择一项感兴趣得技能学习。
你的任务是,给每个人分配一个他学习的技能,使得学得最快的人和最慢的人的时间差距最小。
输入格式:
多组数据,每组数据第一行是两个整数n,m 0 < n,m<100。接下来n行,每行有m个整整数,表示每个人学习这m项技能所需要的时间。 每个整数都不超过1000000000。
输出格式:
对每组数据输出一行,包含一个整数,表示最小差值。
答题说明:
输入样例
3 4
2 4 5 8
6 2 1 9
4 6 8 5
2 3
1 2 3
这是我的超时代码,但由于分析不仔细,所以该代码也调试了很久。。。
10 12 10
输出样例:
1
7
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int a[110][110];
int n,m;
int dfs(int cur,int maxi,int mini)
{
int i,j,k;
if(cur==n){
return maxi-mini;
}
for(i=0;i<m;i++)
{
/*if(maxi<a[cur][i])
maxi=a[cur][i];
if(mini>a[cur][i])
mini=a[cur][i];*/
//dfs(cur+1,maxi,mini); //此处千万不能改变maxi,mini的值,因为递归下来可能对同层的maxi,mini会有影响 !!!
k=min(k,dfs(cur+1,max(a[cur][i],maxi),min(a[cur][i],mini)));
}
return k;
}
int main()
{
int i,j,k;
while(scanf("%d%d",&n,&m)!=EOF)
{
//kk=1000000001;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}
k=dfs(0,-1,2000000000);
printf("%d\n",k);
}
}
因为水平原因,ac代码后续。。。。。。