إخلاء المسؤولية: الطريقة الموضحة أدناه ليست عالمية ، لكنها غالبًا ما تحل مشكلة أو تساعدك في الوصول إلى الحل الصحيح.
إذا طلبت منك مشكلة تدمير / طي / دمج (أو ما شابه) مصفوفة على النحو الأمثل ، فعليك محاولة حلها باستخدام البرمجة الديناميكية على الأجزاء الفرعية.
دعنا نحصل على dp [l] [r] - الإجابة المثلى لشريحة فرعية ذات مؤشرات من l إلى r. تعتمد إعادة حساب الديناميكيات بشكل كبير على المهمة ، ولكن هناك الأفكار العامة التالية:
1) انظر إلى العناصر المتطرفة l و r. إذا كانت تتطابق أو تكمل بطريقة أخرى ، فعلى الأرجح سيكون من الممكن تحديث قيمة dp [l] [r] عبر dp [l + 1] [r-1]. وإلا عبر dp [l] [r-1] أو dp [l + 1 [r].
2) يحدث غالبًا أن المقطع [l ؛ r] لا يمكن تمثيله من خلال بناء واحد. ثم من الضروري النظر في جميع الأقسام المحتملة من هذا الجزء الفرعي إلى جزأين ، أي التكرار على العنصر k من l إلى r-1 وإعادة حساب dp [l] [r] حتى dp [l] [k] و dp [ ك + 1] [ص]. في الأجزاء الفرعية الأصغر ، تم تصنيف هذه الأقسام أيضًا ، وبالتالي ، في الواقع ، يتم أخذ خيارات تقسيم الجزء الفرعي [l ؛ r] ليس فقط إلى جزأين ، ولكن إلى أي عدد منهم.
نبسب ؛