1324E. Sleeping Schedule - Codeforces Solution C++

  Problem Link : 1324E. Sleeping Schedule 


✅ C++ Solution :

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

#define ll long long int

int main()
{
	int n,h,l,r;
	cin>>n>>h>>l>>r;

	int arr[n+1];
	ll dp[n+1][h];
	for(int i=1;i<=n;i++)
		cin>>arr[i];

	ll ans=-1;
	for(int i=0;i<h;i++)
	{
		dp[0][i]=INT_MIN;
		dp[1][i]=INT_MIN;
	}
	if(arr[1] >=l && arr[1]<=r)
	    dp[1][arr[1]]=1;
	else
	    dp[1][arr[1]]=0;
	if(arr[1]-1 >=l && arr[1]-1<=r)
	    dp[1][(arr[1]-1+h)%h]=1;
	else
	    dp[1][(arr[1]-1+h)%h]=0;
	    
	if(n==1)
	{
	    cout<<max(dp[1][arr[1]],dp[1][(arr[1]-1+h)%h]);
	    exit(0);
	    
	    
	}
	    
	for(int i=2;i<=n;i++)
	{
		for(int j=0;j<h;j++)
		{
			if(j>=l && j<=r)
				dp[i][j]=1+max(dp[i-1][(j-arr[i]+h)%h],dp[i-1][(j+1-arr[i]+h)%h]);
			else
				dp[i][j]=0+max(dp[i-1][(j-arr[i]+h)%h],dp[i-1][(j+1-arr[i]+h)%h]);
		//	dp[i][j]+=max(dp[i-1][(j-arr[i]+h)%h],dp[i-1][(j+1-arr[i]+h)%h]);
			if(i==n)
				ans=max(ans,dp[i][j]);
			
    //        cout<<dp[i][j]<<" ";
		}
	//	cout<<endl;
	}

	cout<<ans;

}

 

Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook. 

😇Happy Learning!!