题目描述:
上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。
同学们在教室中坐成了MM行NN列,坐在第i行第j列的同学的位置是(i,j)(i,j),为了方便同学们进出,在教室中设置了KK条横向的通道,LL条纵向的通道。
于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了22个会交头接耳的同学,那么他们就不会交头接耳了。
请你帮忙给小雪编写一个程序,给出最好的通道划分方案。在该方案下,上课时交头接耳的学生的对数最少。
…
…
…
…
AC代码:
#include
using namespace std;
int main()
{
int m,n,k,l,d;
cin>>m>>n>>k>>l>>d;
int a[d][4],X[m]={0},Y[n]={0};
for(int i=0;i>a[i][j];
for(int i=0;ia[i][3])Y[a[i][3]]++;
else Y[a[i][1]]++;
}
else{
if(a[i][0]>a[i][2])X[a[i][2]]++;
else X[a[i][0]]++;
}
}//得到 对某排或某列而言 若有过道 可以减少多少组说话学生
int x1=0,y1=0,shuchu_x[d]={0},shuchu_y[d]={0},xx[m]={0},yy[n]={0};
for(int i=d;i>0;i--){
for(int j=1;j=k)break;
}
if(x1>=k)break;
}//从减少组数大的开始找,若找到则令shuchu_x=1
for(int i=d;i>0;i--){
for(int j=1;j=l)break;
}
if(y1>=l)break;
}
if(k!=0){
int x1=0;
for(int i=1;i