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