מאַקסימום סאַבסטאַנסאַז סאַכאַקל אַזוי אַז קיין דריי זענען קאָנסעקוטיווע  


שוועריקייט לעוועל מיטל
אָפט געבעטן אין 24 * 7 יננאָוואַטיאָן לאַבס אַקסענטורע אַמאַזאָן דעליווערי פּייַפּאַל PayU
מענגע דינאַמיש פּראָגראַממינג

די פּראָבלעם "מאַקסימום סאַבסאַקוואַנס סומע אַזוי אַז קיין דריי זענען קאָנסעקוטיווע" שטאַטן אַז איר האָט געגעבן אַן מענגע of ינטאַדזשערז. איצט איר דאַרפֿן צו געפֿינען אַ סאַבסאַקוואַנס מיט די מאַקסימום סומע אַז איר קען נישט באַטראַכטן דריי קאָנסעקוטיווע עלעמענטן. צו געדענקען, אַ סאַבסאַקוואַנס איז גאָרנישט אָבער אַ מענגע וואָס איז לינקס ווען עטלעכע פון ​​די עלעמענטן זענען אַוועקגענומען פון דער אָריגינעל ינפּוט מענגע בעכעסקעם די סדר זעלביקער.

בייַשפּיל  

מאַקסימום סאַבסטאַנסאַז סאַכאַקל אַזוי אַז קיין דריי זענען קאָנסעקוטיווע

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

דערקלערונג

דאָס איז געווען אַן גרינג ברירה צו קלייַבן 5 און 10. ווייַל קיין אנדערע וועג וועט נישט פירן צו אַ גרעסערע סומע.

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

דערקלערונג

מיר טאָן ניט קלייַבן די 5 וואָס איז אין די מיטן פון די מענגע. ווייַל דאָס וועט מאַכן אַ סאַבסאַקוואַנס וואָס טוט נישט באַפרידיקן די צושטאַנד ימפּאָוזד אין די קשיא.

צוגאַנג  

דער פּראָבלעם האָט אונדז געבעטן צו געפֿינען די סאַבסאַקוואַנס מיט אַ מאַקסימום סומע אַזוי אַז קיין דריי קאָנסעקוטיווע עלעמענטן זענען פּיקט זיך. אַזוי דער נאַיוו צוגאַנג קען זיין די דור פון די סאַבסטאַנסאַז. ווי מיר האָבן געטאן אין עטלעכע פון ​​די פריערדיקע פֿראגן. דער נאַיוו צוגאַנג איז רובֿ פון די צייט צו דזשענערייט די סאַבסטאַנסאַז און קאָנטראָלירן צי די סאַבסטאַנסאַז סאַטיספייז די באדינגונגען וואָס זענען ימפּאָוזד אין די קשיא. אבער דעם צוגאַנג איז צייט-קאַנסומינג און קענען ניט זיין געוויינט פּראַקטאַקלי. ווייַל ניצן די צוגאַנג פֿאַר אפילו מעסיק סייזד ינפּוץ, וועט יקסיד די צייט לימאַץ. אַזוי צו סאָלווע די פּראָבלעם מיר דאַרפֿן צו נוצן עטלעכע אנדערע מעטהאָדס.

זע אויך
ציילן אפילו לענג ביינערי סיקוואַנסיז מיט דער זעלביקער סומע פון ​​ערשטער און רגע האַלב ביטן

מיר וועלן נוצן דינאַמיש פּראָגראַממינג צו סאָלווע די פּראָבלעם, אָבער איידער מיר דאַרפֿן צו דורכפירן עטלעכע קאַסעוואָרקס. די קאַסעוואָרק איז דורכגעקאָכט צו רעדוצירן די ערשטע פּראָבלעם אין קלענערער סאַב-פּראָבלעמס. ווייַל אין דינאַמיש פּראָגראַממינג, מיר רעדוצירן די פּראָבלעם אין קלענערער סאַב-פּראָבלעמס. דעריבער, באַטראַכטן מיר האָפּקען דעם קראַנט עלעמענט, און אונדזער פּראָבלעם איז רידוסט צו סאַלווינג די פּראָבלעם ביז די פריערדיקע עלעמענט. באַטראַכטן, מיר קלייַבן די קראַנט עלעמענט. דערנאָך מיר האָבן צוויי ברירות פֿאַר די פריערדיקע עלעמענט. אָדער מיר קלייַבן די פֿריִערדיקע עלעמענט, אויב מיר טאָן ניט, מיר קענען נישט קלייַבן די עלעמענט די פריערדיקע צו פרייַערדיק עלעמענט. אָבער אויב מיר טאָן ניט, די פּראָבלעם איז רידוסט צו סאַלווינג די פּראָבלעם ביז די פריערדיקע צו די פריערדיקע עלעמענט. עס וועט זיין גרינגער צו פֿאַרשטיין די קאָד.

קאָדעקס  

C ++ קאָד צו געפֿינען די מאַקסימום סאַבסטאַנסאַז אַזוי אַז קיין דריי זענען קאָנסעקוטיווע

#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

דזשאַוואַ קאָד צו געפֿינען די מאַקסימום סאַבסטאַנסאַז אַזוי אַז קיין דריי זענען קאָנסעקוטיווע

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

קאַמפּלעקסיטי אַנאַליסיס  

צייט קאַמפּלעקסיטי

אָ (N), ווייַל מיר פשוט דורכגעקאָכט די מענגע און קעסיידער פּלאָמבירן אונדזער דפּ מענגע. אזוי די צייט קאַמפּלעקסיטי איז לינעאַר.

זע אויך
מינימאַקס אַלגערידאַם

ספעיס קאַמפּלעקסיטי

אָ (N), ווייַל מיר האָבן צו מאַכן אַ דימענשאַנאַל דפּ מענגע צו קראָם די וואַלועס. די פּלאַץ קאַמפּלעקסיטי איז אויך לינעאַר.