Codeforces 1324 E. Sleeping Schedule(DP)

在这里插入图片描述

题意:

n n 个时间间隔,一天共有 h h 小时,每次睡 a i a_i 或者 a i 1 a_{i-1} 段时间,如果在 l l r r 段时间入睡 那么满意度 + 1 +1 ,问满意度最高多少

d p [ i ] [ j ] dp[i][j] 表示在第 i i 段在第 j j 小时睡觉的最大满意值 。然后直接 d p dp 即可。

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;
}
发布了728 篇原创文章 · 获赞 431 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qq_43627087/article/details/104854377