貪心規律:不管是行還是列,優先輸出價值大(即能把交頭接耳同學盡可能多的分開)的序號。
使用結構體記錄序號mark和該號序的價值,分別輸入統計所有行序號和所有列序號的價值。
因此,只需對統計好的行結構體陣列、列結構體陣列按價值從大到小排序,分別取前k和前l個的位置座標即可,可以證明這是最優的思路。
要注意有坑。在找出我們需要的位置時,別忘了對位置再從小到大排個序輸出,不然wa聲一片。
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef
long
long ll;
const
int mod =
10000007
;const
int inf =
0x3f3f3f3f
;const
double pi =
acos(-
1.0)
;const
int maxn =
1010
;struct noderow[maxn]
,col[maxn]
;int a[maxn]
,b[maxn]
;//按價值從大到小排序
intcmp
(node a, node b)
intmain()
int x,y,p,q;
for(
int i=
0;i)//按價值從大到小排序
sort
(row+
1,row+maxn,cmp)
;//直接輸出前k個序號會wa掉
//將前k個序號儲存一下按從小到大順序輸出
for(
int i=
1;i<=k;i++
) a[i]
= row[i]
.mark;
sort
(a+1
,a+k+1)
;for
(int i=
1;i<=k;i++
)printf
("\n");
//按價值從大到小排序
sort
(col+
1,col+maxn,cmp)
;//直接輸出前l個序號會wa掉
//將前l個序號儲存一下按從小到大順序輸出
for(
int i=
1;i<=l;i++
) b[i]
= col[i]
.mark;
sort
(b+1
,b+l+1)
;for
(int i=
1;i<=l;i++
)return0;
}
洛谷 P1056 排座椅
題目描述 上課的時候總會有一些同學和前後左右的人交頭接耳,這是令小學班主任十分頭疼的一件事情。不過,班主任小雪發現了一些有趣的現象,當同學們的座次確定下來之後,只有有限的d對同學上課時會交頭接耳。同學們在教室中坐成了m行n列,坐在第i行第j列的同學的位置是 i,j 為了方便同學們進出,在教室中設定了...
洛谷P1056 排座椅
上課的時候總會有一些同學和前後左右的人交頭接耳,這是令小學班主任十分頭疼的一件事情。不過,班主任小雪發現了一些有趣的現象,當同學們的座次確定下來之後,只有有限的d對同學上課時會交頭接耳。同學們在教室中坐成了m行n列,坐在第i行第j列的同學的位置是 i,j 為了方便同學們進出,在教室中設定了k條橫向的...
洛谷P1056 排座椅
先上題目鏈結 注釋寫得多,直接貼 了 include include include using namespace std intmain else if ay by for i 1 i k i 退出這個迴圈時p為分割最大的線的下標 horizontal tmp false 求出一條分割最多的線後...