Complexity of above solution is O(n)

On Jan 5, 10:50 pm, suhash <suhash.venkat...@gmail.com> wrote:
> In any column, we can place atmost 2 pebbles.
>
> (a) Considering an isolated column, we can place 1 or 2 pebbles.
> Solutions: {1},{2},{3},{4},{1,3},{1,4},{2,4}
> (b) Have an array dp[n][5][5]. Let dp[i][j][k] store the maximum sum
> that can be achieved starting from column 'i' to column 'n-1' (columns
> are numbered 0 - (n-1)), where row 'j' and row 'k' of column 'i-1' are
> chosen. If j=0 or k=0 (then no cell is chosen). (Rows are numbered 1 -
> 4).
>
> Here is the C++ code:
>
> #include<iostream>
> #include<cstdio>
> #include<string.h>
>
> using namespace std;
>
> #define MAXN 1000+5
>
> int n;
> int a[MAXN][5];
> int dp[MAXN][5][5];
>
> int go(int i,int j,int k){
>     //Without loss of generality, assume always j<=k (we can
> incorporate that in our code)
>     if(i==n)    return 0;
>     int &ans=dp[i][j][k];
>     if(ans!=-1)    return ans;
>     ans=go(i+1,0,0);
>     for(int h=1;h<=4;h++)    if(h!=j&&h!=k)    ans=max(ans,a[i][h]+go(i
> +1,0,h));
>     if(j!=1&&k!=3)    ans=max(ans,a[i][1]+a[i][3]+go(i+1,1,3));
>     if(j!=1&&k!=4)    ans=max(ans,a[i][1]+a[i][4]+go(i+1,1,4));
>     if(j!=2&&k!=4)    ans=max(ans,a[i][2]+a[i][4]+go(i+1,2,4));
>     return ans;
>
> }
>
> int main(){
>         scanf("%d",&n);
>         //Set 'dp' array to -1 initially
>         memset(dp,-1,sizeof(dp));
>         for(int i=0;i<n;i++) for(int j=1;j<=4;j++)        
> scanf("%d",&a[i][j]);
>         int ans=go(0,0,0);//maximum value
>         printf("%d\n",ans);
>         return 0;
>
> }
>
> On Jan 5, 10:00 pm, Decipher <ankurseth...@gmail.com> wrote:
>
> > We are given a checkerboard which has 4 rows and n columns, and has an
> > integer written in each square. We are also given a set of 2n pebbles,
> > and we want to place some or all of these on the checkerboard (each
> > pebble can be placed on exactly one square) so as to maximize the sum
> > of the integers in the squares that are covered by pebbles. There is
> > one constraint: for a placement of pebbles to be legal, no two of them
> > can be on horizontally or vertically adjacent squares (diagonal
> > adjacency is  fine).
>
> > (a) Determine the number of legal patterns that can occur in any
> > column (in isolation, ignoring the pebbles in adjacent columns) and
> > describe these patterns.
>
> > Call two patterns compatible if they can be placed on adjacent columns
> > to forma legal placement. Let us consider subproblems consisting of
> > the  first k columns 1  <= k <=   n. Each subproblem can be assigned a
> > type, which is the pattern occurring in the last column.
>
> > (b) Using the notions of compatibility and type, give an O(n)-time
> > dynamic programming algorithm for computing an optimal placement

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algoge...@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to