C++ 排座椅

题目描述:
上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的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

你可能感兴趣的:(洛谷)