Advertisement
Singasking

memoization + tabulation

Jan 14th, 2023
919
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1. class Solution {
  2. public:
  3. int f(vector<int>& cuts,int s,int e,vector<vector<int>> &dp) {
  4.    
  5.     if(s>=e)  return 0;
  6.     if(dp[s][e]!=-1) return dp[s][e];
  7.     int mini=1e9;
  8.      int cut=0;
  9.      bool canCut=false;
  10.     for(int i=0;i<cuts.size();i++) {
  11.  
  12.         if(cuts[i]<e&&cuts[i]>s) {
  13. canCut=true;
  14.             cut = (e-s)+f(cuts,s,cuts[i],dp) + f(cuts,cuts[i],e,dp);
  15.            
  16.             mini = min(cut,mini);
  17.         }
  18.     }
  19. return  dp[s][e]=(canCut)? mini:0;
  20. }
  21.  
  22.     int minCost(int n, vector<int>& cuts) {
  23.         sort(cuts.begin(),cuts.end());
  24.         //cout<<n<<endl;
  25.         vector<vector<int>> dp(n+1,vector<int>(n+1,0));
  26.         int cut=0;
  27.       //  return f(cuts,0,n,dp);
  28.         for(int i=n;i>=0;i--) {
  29.            
  30.             for(int j=i+1;j<=n;j++) {
  31.                 int mini = 1e9;
  32.                 bool canCut=false;
  33.  
  34.  
  35.                     for(int k=0;k<cuts.size();k++) {
  36.                            if(cuts[k]>=j) break;
  37.         if(cuts[k]<j&&cuts[k]>i) {
  38.             canCut=true;
  39.             int cut = (j-i)+dp[i][cuts[k]] + dp[cuts[k]][j]; //f(cuts,s,cuts[i],dp) + f(cuts,cuts[i],e,dp);
  40.             mini = min(cut,mini);
  41.         }
  42.     }
  43.         dp[i][j] = (canCut)?mini:0;
  44.  
  45.  
  46.             }
  47.         }
  48.        
  49.   return dp[0][n];
  50.     }
  51. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement