Module: Corak dalam Pengaturcaraan Dinamik - 2


Problem

1 /5


permainan isi

Theory Click to read/hide

Penafian: Kaedah yang diterangkan di bawah tidak universal, tetapi ia selalunya boleh menyelesaikan masalah atau membantu anda mendapatkan penyelesaian yang betul.

Jika masalah meminta anda memusnahkan/runtuh/mencantum (atau serupa) secara optimum suatu tatasusunan, maka anda harus cuba menyelesaikannya menggunakan pengaturcaraan dinamik pada subsegmen.

Mari dapatkan dp[l][r] - jawapan optimum untuk subsegmen dengan indeks dari l hingga r. Pengiraan semula dinamik sangat bergantung kepada tugas, tetapi terdapat idea umum berikut:

1) Lihat unsur ekstrem l dan r. Jika ia sepadan atau melengkapi dalam beberapa cara lain, maka kemungkinan besar adalah mungkin untuk mengemas kini nilai dp[l][r] melalui dp[l+1][r-1]. Jika tidak melalui dp[l][r-1] atau dp[l+1[r].

2) Selalunya berlaku bahawa segmen [l;r] tidak boleh diwakili melalui satu binaan. Maka adalah perlu untuk mempertimbangkan semua bahagian yang mungkin bagi subsegmen ini kepada dua bahagian, iaitu, lelaran ke atas elemen k dari l ke r-1 dan pengiraan semula dp[l][r] melalui dp[l][k] dan dp[ k+1][r] . Dalam subsegmen yang lebih kecil, bahagian ini juga telah disusun, oleh itu, sebenarnya, pilihan untuk membahagi subsegmen [l;r] bukan sahaja kepada dua bahagian, tetapi kepada mana-mana nombor daripadanya diambil kira.
 

Problem

Anda diberi sehelai kertas berkotak-kotak yang diperbuat daripada n petak berwarna bernombor dari 1 hingga n dari kiri ke kanan. Petak ke-i pada mulanya berwarna ci.

Kami mengatakan bahawa kuasa dua i dan j terletak dalam komponen yang sama jika c= cj dan c= ck untuk semua k memuaskan i < k < j. Dalam erti kata lain, semua petak pada segmen dari i hingga j mesti mempunyai warna yang sama.
Sebagai contoh, jalur [3,3,3] mempunyai 1 komponen yang disambungkan, manakala [5,2,4,4] mempunyai 3.

Isi permainan dimainkan pada jalur ini seperti berikut:
Pada permulaan permainan, anda memilih satu petak permulaan rawak (ini tidak dikira sebagai giliran).
Kemudian, pada setiap pergerakan, anda menukar warna komponen yang disambungkan yang mengandungi petak permulaan kepada mana-mana warna lain.

Ketahui bilangan minimum pergerakan yang diperlukan untuk mewarna semula keseluruhan jalur dalam satu warna.

Input:
Baris pertama mengandungi integer tunggal n (1 ≤ n ≤ 5000) — bilangan segi empat sama.

Baris kedua mengandungi integer c1,c2,…,cn (1 ≤ ci <5000) — warna awal segi empat sama.

Output:
Cetak satu integer — bilangan minimum pergerakan untuk dibuat.

Contoh:
 
Penjelasan:
Salah satu cara optimum dalam contoh pertama: [5, 2, 2, 1] -> [5, 2, 2, 2] -> [5, 5, 5, 5]
Input Output
4
5 2 2 1
2
8
4 5 2 2 1 3 5 5
4
1
4
0