Dengan diberikan dua bentuk yang berdekatan dari area yang sama, tentukan cara optimal untuk membagi bentuk pertama menjadi jumlah minimum segmen yang berdekatan sehingga dapat disusun ulang untuk membentuk bentuk kedua. Dengan kata lain, temukan jumlah minimum segmen yang diperlukan yang dapat membentuk kedua bentuk tersebut.
"Berdampingan" berarti bahwa setiap kotak dalam bentuk dapat dicapai dari kotak lain dengan berjalan melintasi tepi. Bentuk dan segmen diizinkan memiliki lubang.
"Tata Ulang" berarti Anda memindahkan segmen; Anda dapat menerjemahkan, memutar, dan memantulkannya.
Bentuknya terkandung pada kotak; dengan kata lain, setiap bentuk terdiri dari kumpulan kuadrat satuan yang disatukan dengan sudut / tepinya.
Spesifikasi Input
Input akan diberikan dalam beberapa format yang masuk akal - daftar poin, array string yang mewakili setiap kisi, dll. Anda juga dapat mengambil ukuran kisi jika diminta. Grid akan memiliki dimensi yang sama dan dua bentuk dijamin memiliki area yang sama, dan area tersebut akan positif.
Spesifikasi Output
Keluaran seharusnya hanya bilangan bulat positif tunggal. Perhatikan bahwa akan selalu ada jawaban positif karena dalam skenario kasus terburuk, Anda hanya membagi bentuk menjadi N
kotak satuan.
Contohnya
Contoh-contoh disajikan sebagai kotak dengan .
mewakili bagian kosong dan #
mewakili bentuk.
Kasus 1
Memasukkan
.....
.###.
.#.#.
.###.
.....
###..
..#..
..#..
..###
.....
Keluaran
2
Penjelasan
Anda dapat membaginya menjadi dua blok berbentuk L dari 4:
#
###
Kasus 2
Memasukkan
#...
##..
.#..
.##.
.##.
####
....
....
Keluaran
2
Penjelasan
Anda dapat membagi bentuk seperti:
A...
AA..
.A.
.BB.
.AA.
BBAA
....
....
Anda juga bisa:
A...
AA..
.B..
.BB.
.AB.
AABB
....
....
Kasus 3
Memasukkan
#....#
######
.####.
.####.
Keluaran
2
Penjelasan
A....B
AAABBB
.ABBB.
.AAAB.
(Kasing uji ini menunjukkan perlunya memutar / memantulkan bentuk untuk hasil optimal)
Kasus 4
Memasukkan
.###.
..#..
.##..
.##..
Keluaran
2
Penjelasan
Tidak masalah bagaimana Anda memilih blok, memilih 2x1 dari bentuk pertama tentu mencegah dua lainnya dari dikelompokkan bersama; dengan demikian, Anda dapat menggunakan satu 2x1 dan dua 1x1s. Namun, (terima kasih @Jonah), Anda dapat membaginya menjadi bentuk 3-blok L dan satu kotak seperti ini:
.AAB.
..A..
.AA..
.BA..