宿舍分配
| ||||||||
程序文件名
: school.cpp/school.pas/...
| ||||||||
一个很有名的大学
NKU
里有不少的教学楼和宿舍楼。
学校为了学生们的切身利益着想,希望能有一个好的分配方案,使得每天早上学生们去上课所要走的路程总和最小。 为了简化问题,我们假设
1.
每个教学楼都属于一个学院,而且每个学院只有一个教学楼
2.
每天早上第一节每个学生都有课,且这个课是在自己学院楼里上的专业课。
3.
如图所示,宿舍的位置为
(Pj,Qj),
学院楼的位置为
(Xi,Yi)
时,这两个楼的距离
Dij
由下面的公式来决定。
Dij=|Xi-Pi|+|Yi-Qi|+1
宿舍分配可以很随意,即同一个学院的学生们可以不住在一起,一个宿舍里也可以住几个不同学院的学生。
现在学校已经有了一个宿舍分配方案,现在委托编程高手你来验证一下这个方案是不是最优的。 | ||||||||
输入
(请使用标准输入输出,而不要读写文件)
| ||||||||
输入数据的第
1
行有两个整数
N,M
。
N(1<=N<=100)
为学院个数(即教学楼个数),
M(1<=M<=100)
为宿舍楼个数。
紧接着的 N 行为每个学院的资料,每行有 3 个整数 : 学院楼的位置 Xi,Yi(-1000<=Xi,Yi<=1000) 和学生数 Bi(1<=Bi<=1000) 。 再下面的 M 行为每个宿舍的资料,每行有 3 个整数 : 宿舍的位置 Pj,Qj(-1000<=Pj,Qj<=1000) 和可以住的学生数 Cj(1<=Cj< = 1000) 。 最后 N 行为现在学校的分配方案。 每行有 M 个整数。每个整数 Eij(1<=i<=N,1<=j<=M,0<=Eij<=1000) 表示第 i 学院的多少个学生住第 j 宿舍。 输入的方案一定是有效的,即满足 Bi=Ei1+Ei2+...+Eim, Cj>=(E1j+E2j+...Enj) 。 | ||||||||
输出
(请使用标准输入输出,而不要读写文件)
| ||||||||
若现在的方案是最优的话只要输出一行
”yes”
(小写字母,不包含引号)。
否则,先输出 ”no” (小写字母,不包含引号),紧接着输出一个更优越的方案,这个方案可以不是最优的,但一定要比原来的方案更好。 方案的输出格式跟输入的格式一样,有 N 行。每行 M 个数字。每个整数 Eij(1<=i<=N,1<=j<=M,0<=Eij<=1000) 表示第 i 学院的多少个学生住第 j 宿舍。 | ||||||||
|
暂无答案