Эч кандай ырааттуулук болбогондой максималдуу ырааттуулук суммасы  


Кыйынчылык деңгээли орто
Көп суралган 24 * 7 Innovation Labs Accenture Amazon Delhivery PayPal PayU
согуштук тизме Динамикалык программалоо

"Үчүнчү катары менен болбой турган максималдуу кийинки сумма" көйгөйүндө сизге an берилген согуштук тизме of бүтүн. Эми сиз ырааттуу үч элементти карап чыгууга болбой турган максималдуу суммага ээ болгон ырааттуулукту табышыңыз керек. Эске салсак, кийинки нерсе, кээ бир элементтер баштапкы киргизүү массивинен буйрукту бирдей алып салганда калган массивден башка нерсе эмес.

мисал  

Эч кандай ырааттуулук болбогондой максималдуу ырааттуулук суммасытөөнөч

a[] = {2, 5, 10}
50

түшүндүрүү

Бул 5 жана 10 тандап алуу оңой эле, анткени башка жол менен чоң сумма чыкпайт.

a[] = {5, 10, 5, 10, 15}
40

түшүндүрүү

Массивдин ортосунда турган 5ти тандабайбыз. Себеби, бул суроого коюлган шартты канааттандырбаган бир кийинки нерсени жаратат.

жакындоо  

Көйгөй максималдуу суммадагы ырааттуулукту издөөнү суранды, анткени үч катар элементтер тандалбасын. Ошентип, аң-сезимсиз мамиле кийинки муундар болушу мүмкүн. Мурунку суроолордун айрымдарында айткандай. Көпчүлүк учурларда, жөнөкөйлүктүн пайда болушу, кийинчерээк бул суроого коюлган шарттарга ылайыктуулугун текшерүү. Бирок мындай ыкма көп убакытты талап кылат жана аны иш жүзүндө колдонууга болбойт. Анткени орточо көлөмдөгү кириштерге ыкманы колдонуу убакыттын чегинен ашып кетет. Ошентип, көйгөйдү чечүү үчүн башка бир ыкманы колдонуу керек.

ошондой эле
Биринчи жана экинчи жарым биттердин бирдей суммасына ээ болгон жуптук экилик катарларды эсептөө

Биз колдонобуз Динамикалык программалоо көйгөйдү чечүү үчүн, бирок ага чейин бир аз тапшырмаларды аткарышыбыз керек. Бул тапшырма баштапкы көйгөйдү кичи субпроблемаларга азайтуу үчүн жасалган. Динамикалык программалоодо биз көйгөйдү кичине чакан көйгөйлөргө бөлөбүз. Ошентип, учурдагы элементти өткөрүп жибергенибизди карап көрөлү, анда биздин маселе мурунку элементке чейин көйгөйдү чечүүгө чейин азаят. Карап көрүңүз, биз учурдагы элементти тандайбыз. Андан кийин бизде мурунку элемент үчүн эки тандоо бар. Же биз мурунку элементти тандайбыз, эгер алсак, анда мурунку элементтен мурунку элементти тандай албайбыз. Бирок антпесек, маселе мурунку элементке өткөнгө чейин, көйгөйдү чечүүгө чейин кыскарат. Кодду колдонуп түшүнүү жеңилирээк болот.

коду  

С ++ коду, үчөөнүн катары менен болбошу үчүн, максималдуу ырааттуулук суммасын табуу керек

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a[] = {1, 2, 3, 4, 5, 6};
    int n = sizeof(a) / sizeof(a[0]);
    int dp[n];

    // base case
    if(n>=0)dp[0] = a[0];
    if(n>0)dp[1] = a[0] + a[1];
    if(n>1)dp[2] = max({a[0] + a[1], a[2]+a[0], a[2]+a[1]});
    // if you choose a[i], then choose a[i-1] that is dp[i] = a[i]+a[i-1]+dp[i-3]
    // if you choose a[i], then you do not choose a[i-1] dp[i] = dp[i-2] + a[i]
    // if you do not choose a[i], dp[i] = dp[i-1]
    for (int i = 3; i < n; i++)
        dp[i] = max({a[i]+a[i-1]+dp[i-3], dp[i-2]+a[i], dp[i-1]});
    cout<<dp[n-1];
}
16

Кийинки үчөөнүн катары менен болбой турган максималдуу кийинки сумманы табуу үчүн Java коду

import java.util.*;
class Main{
  public static void main(String[] args)
  {
    int a[] = {1, 2, 3, 4, 5, 6};
    int n = a.length;
    int dp[] = new int[n];

    // base case
    if(n>=0)dp[0] = a[0];
    if(n>0)dp[1] = a[0] + a[1];
    if(n>1)dp[2] = Math.max(Math.max(a[0] + a[1], a[2]+a[0]), a[2]+a[1]);
    // if you choose a[i], then choose a[i-1] that is dp[i] = a[i]+a[i-1]+dp[i-3]
    // if you choose a[i], then you do not choose a[i-1] dp[i] = dp[i-2] + a[i]
    // if you do not choose a[i], dp[i] = dp[i-1]
    for (int i = 3; i < n; i++)
        dp[i] = Math.max(Math.max(a[i]+a[i-1]+dp[i-3], dp[i-2]+a[i]), dp[i-1]);

    System.out.println(dp[n-1]);
  }
}
16

Комплекстик анализ  

Убакыт татаалдыгы

O (N), анткени биз жөн гана массивден өтүп, DP массивибизди толтура бердик. Ошентип, убакыттын татаалдыгы сызыктуу.

ошондой эле
MiniMax алгоритми

Космостун татаалдыгы

O (N), анткени биз баалуулуктарды сактоо үчүн бир өлчөмдүү DP массивин жасашыбыз керек болчу. Космостун татаалдыгы дагы сызыктуу.