➤ 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!!
