ציילן אַלע סאַבסטאַנסיז וואָס האָבן פּראָדוקט ווייניקער ווי ק  


שוועריקייט לעוועל גרינג
אָפט געבעטן אין ביטעדאַנסע Capital One קאָדנאַטיאָן דאַטאַבריקס עקספּעדיאַ יאַנדעקס
מענגע דינאַמיש פּראָגראַממינג

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

בייַשפּיל  

ציילן אַלע סאַבסטאַנסיז וואָס האָבן פּראָדוקט ווייניקער ווי ק

a[] = {1, 2, 3, 4, 5}
k = 8
Number of subsequences less than 8: 11

דערקלערונג

עס זענען 11 סאַבסטאַנסיז וואָס האָבן פּראָדוקט ווייניקער ווי געגעבן ק (= 8). די סאַבסטאַנסיז זענען געוויזן אין די בילד אויבן.

צוגאַנג  

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

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

זע אויך
מאַקסימום 69 נומער לעעטקאָדע סאַלושאַן

אונדזער dp מענגע צעל dp [i] [j] דינאָוץ די נומער פון סאַבסטאַנסיז וואָס האָבן פּראָדוקט ווייניקער ווי i און זענען געשאפן מיט די ערשטע J יסודות פון די ינפּוט. אַזוי צו געפֿינען dp [i] [j], מיר זענען אָפענגיק אויף dp [i / a [j]] [j] און dp [i] [j-1]. אַזוי אויב אַ [i]> i, נעמען דעם עלעמענט אין די סאַבסאַקוואַנס, מיינען אַז אַ [i] זיך איז גרעסער ווי K. אזוי דעם עלעמענט וועט ניט זיין קאַנסידערד. אַזוי אַזוי מיר ציילן אַלע סאַבסטאַנסיז וואָס האָבן פּראָדוקט ווייניקער ווי ק.

קאָדעקס  

C ++ קאָד צו ציילן אַלע סאַבסטאַנסיז וואָס האָבן פּראָדוקט ווייניקער ווי ק

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

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

    for (int i=1;i<k;i++){
        for (int j=1;j<=n;j++){
            dp[i][j] = dp[i][j-1];
            if (a[j-1] <= i && a[j-1] > 0)
                dp[i][j] += dp[i/a[j-1]][j-1] + 1;
        }
    }

    cout<<dp[k-1][n];
}
11

Java קאָד צו ציילן אַלע סאַבסטאַנסיז וואָס האָבן פּראָדוקט ווייניקער ווי ק

import java.util.*;
class Main{
  public static void main(String[] args)
  {
      int a[] = {1, 2, 3, 4, 5};
      int n = a.length;
      int k = 8;
      int dp[][] = new int[k][n+1];
      for(int i=0;i<k;i++)
      	for(int j=0;j<n+1;j++)
      		dp[i][j] = 0;

      for (int i=1;i<k;i++){
          for (int j=1;j<=n;j++){
              dp[i][j] = dp[i][j-1];
              if (a[j-1] <= i && a[j-1] > 0)
                  dp[i][j] += dp[i/a[j-1]][j-1] + 1;
          }
      }
    System.out.println(dp[k-1][n]);
  }
}
11

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

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

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

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

אָ (N * ק), ווייַל מיר באשאפן אַ 2 ד דפּ טיש מיט N * K סעלז. אזוי די פּלאַץ קאַמפּלעקסיטי איז אויך פּאַלינאָומיאַל.

זע אויך
בינאָמיאַל קאָואַפישאַנט