Masalah memetik pizza Winkler:
- Pie pizza bundar
n
irisan, di mana irisani
memiliki luasS_i
yaitu area berbeda untuk setiap potongan pie. - Pelahap Alice dan Bob bergantian memetik irisan, tetapi tidak sopan untuk membuat beberapa celah dalam pai (menganggapnya tidak diizinkan).
- Jadi setiap pemakan dibatasi untuk mengambil salah satu dari dua irisan yang berdekatan dengan wilayah terbuka. Alice yang pertama, dan kedua pemakan mencari pie sebanyak mungkin.
Bagaimana algoritma pemrograman dinamis menentukan berapa banyak pie yang dimakan Alice, jika Alice dan Bob bermain sempurna untuk memaksimalkan konsumsi pizza mereka?
Pemahaman saya:
Dalam masalah DP umum, kami maju dengan menemukan sub-masalah yang dapat divisualisasikan menggunakan pohon rekursi atau, lebih ketat, menggunakan DAG. Di sini, saya tidak menemukan petunjuk apa pun untuk menemukan sub-masalah di sini.
Di sini, untuk sekumpulan S_i tertentu, kita perlu memaksimalkan luas irisan yang dimakan oleh Alice. Ini akan tergantung pada memilih permutasi irisan Pizza dari permutasi (n-1). Memilih irisan area maks dari dua opsi yang tersedia di setiap n \ 2 ternyata yang didapatkan Alice, akan memberi kita luas total irisan untuk permutasi. Kita perlu menemukan area slice untuk semua permutasi seperti itu. Dan kemudian maksimum dari ini.
Adakah yang bisa membantu saya untuk maju?
sumber
pizzaAmount
tidak hanya bergantung pada apa yang merupakan indeks awal dan berhenti dari irisan yang tersisa dan bukan pada urutan pizza yang telah Anda dan teman Anda makan sehingga Anda dapat menyimpan hasilnya dalam matriks untuk menghindari perhitungan ulang. Oleh karena itu, urutan algoritmanya adalah O (n ** 2).Untuk sebagian pizza, tentukan
F(i,j)
berapa banyak orang yang dapat makan irisan. Potongan pizza(i,j)
adalah:Tentukan
R(i,j)
(berapa banyak yang tersisa untuk orang kedua) sebagaisum(S_x, x in slices(i,j)) - F(i,j)
.Dengan:
maksimum yang bisa dimakan Alice dihitung dengan:
sumber