题意:
个时间间隔,一天共有 小时,每次睡 或者 段时间,如果在 和 段时间入睡 那么满意度 ,问满意度最高多少
用 表示在第 段在第 小时睡觉的最大满意值 。然后直接 即可。
AC代码:
const int N = 2000 + 10;
int n, m, h, l, r;
int ans, res, cnt, pos;
int a[N];
int dp[N][N];
int main()
{
sdd(n, h);
sdd(l, r);
mem(dp, -0x3f);
rep(i, 1, n)
sd(a[i]);
dp[0][0] = 0;
rep(i, 1, n)
{
rep(j, 0, h - 1)
{
dp[i][j] = max(dp[i - 1][(j - a[i] + h) % h], dp[i - 1][(j - (a[i]-1) + h) % h]) + (l <= j && j <= r);
}
}
ans = 0;
rep(i, 0, h - 1)
ans = max(dp[n][i], ans);
pd(ans);
return 0;
}