2466. Kira Cara Untuk Membina Rentetan Yang Baik
Kesukaran: Sederhana
Topik: Pengaturcaraan Dinamik
Memandangkan integer sifar, satu, rendah dan tinggi, kita boleh membina rentetan dengan bermula dengan rentetan kosong, dan kemudian pada setiap langkah melakukan salah satu daripada yang berikut:
Ini boleh dilakukan beberapa kali.
Rentetan baik ialah rentetan yang dibina oleh proses di atas yang mempunyai panjang antara rendah dan tinggi (inklusif).
Kembalikan bilangan berbeza rentetan baik yang boleh dibina memenuhi sifat ini. Oleh kerana jawapannya boleh besar, kembalikan modulo 109 7.
Contoh 1:
Contoh 2:
Kekangan:
Petunjuk:
Penyelesaian:
Kita perlu menumpukan pada membina rentetan dengan panjang yang berbeza dan mengira bilangan rentetan yang sah yang memenuhi syarat yang diberikan. Mari kita pecahkan pendekatan:
Definisi Negeri:
Biarkan dp[i] mewakili bilangan rentetan panjang i yang sah yang boleh dibina menggunakan nilai sifar dan satu yang disediakan.
Hubungan Berulang:
Hubungan berulang menjadi:
dp[i] = dp[i - sifar] dpi - satu
Kes Asas:
Pengiraan Akhir:
Mari laksanakan penyelesaian ini dalam PHP: 2466. Kira Cara Untuk Membina Rentetan Yang Baik
Penjelasan:
- Permulaan: Kita mulakan dengan menetapkan huruf besar dp[0] = 1, bermakna terdapat satu cara untuk membentuk rentetan panjang 0 (rentetan kosong).
- Kemas Kini Pengaturcaraan Dinamik: Untuk setiap kemungkinan panjang rentetan i dari 1 hingga tinggi, kami menyemak sama ada kami boleh menambah rentetan panjang sifar atau satu pada rentetan yang lebih kecil. Kami mengemas kini dp[i] sewajarnya dengan menambah bilangan cara untuk membentuk rentetan panjang i-sifar dan i-satu, memastikan bahawa keputusan diambil modulo 109 7.
- Pengiraan Keputusan Akhir: Kami meringkaskan semua nilai dp[i] untuk i dalam julat [rendah, tinggi] untuk mendapatkan kiraan akhir rentetan yang sah.
Kerumitan Masa:
Oleh itu, kerumitan masa keseluruhan ialah ** O(tinggi) **, yang cukup cekap untuk had input.
Penyelesaian ini menyelesaikan masalah dalam kekangan dengan cekap.
Pautan Kenalan
Jika anda mendapati siri ini membantu, sila pertimbangkan untuk memberi repositori bintang di GitHub atau berkongsi siaran pada rangkaian sosial kegemaran anda ?. Sokongan anda amat bermakna bagi saya!
Jika anda mahukan kandungan yang lebih berguna seperti ini, sila ikuti saya:
Atas ialah kandungan terperinci Kira Cara Untuk Membina Rentetan Yang Baik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!