E. Sleeping Schedule(记忆化搜索)

简介: E. Sleeping Schedule(记忆化搜索)

题目

题意

  • 输入 n(≤2000) h L R (0≤L≤R<h≤2000) 和长为 n 的数组 a(1≤a[i]<h)。
  • 对于每个 a[i],你可以把它减一,或者保持不变(换句话说,每个 a[i] 至多 -1 一次)。
  • 定义前缀和 s[0]=a[0], s[i]=s[i-1]+a[i]。
  • 如果 s[i]%h 落在闭区间 [L,R] 内,则分数加一。
  • 最大化分数。

思路

  • 定义dfs(i,j)为第i次睡觉的时间为j的最大分数
  • 转移dfs(i,j) = max(dfs(t1,s+1) + (t1 >= l && t1 <= r),dfs(t2,s+1) + (t2 >= l && t2 <= r));
  • 观察每个数字转移的时候,可以减一或者不减一,那么很明显,对于一个中间阶段有太多的重复到达的方式
  • 所以记忆化搜索很容易写,也可以直接递推[codeforces.com/blog/entry/…

代码

ini

复制代码

const double eps = 1e-6;
const double PI = acos(-1.0);
const int INF = 0x3f3f3f3f;
const int N = 2010;
int a[N];
int f[N][N];//count
int n,h,l,r;
int dfs(int t,int s)
{
    if(s > n)return 0;
    if(f[t][s] != -1)return f[t][s];
    int t1 = (t + a[s]) % h,t2 = (t + a[s] + h - 1) % h;
    return f[t][s] = max(dfs(t1,s+1) + (t1 >= l && t1 <= r),dfs(t2,s+1) + (t2 >= l && t2 <= r));
}
void solve() 
{
    cin >> n >> h >> l >> r;
    for(int i = 1;i <= n;i ++)cin >> a[i];
    memset(f,-1,sizeof f);
    cout << dfs(0,1) << endl;
}


相关文章
|
2天前
|
前端开发 调度
300 行代码实现 React 的调度器 Scheduler
说是实现,但其实我们只是在 React Scheduler 源码的基础上进行了简化,省略掉一些繁琐的细节,添加了丰富的注释,保证代码可直接执行。 大家可以复制代码到编辑器中,直接运行,非常适合学习 React 源码用。
43 0
|
索引
LeetCode 207. Course Schedule
现在你总共有 n 门课需要选,记为 0 到 n-1。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习?
61 0
LeetCode 207. Course Schedule
|
监控 Java 测试技术
ScheduledThreadPoolExecutor踩过最痛的坑
ScheduledThreadPoolExecutor踩过最痛的坑
195 0
ScheduledThreadPoolExecutor踩过最痛的坑
codeforces1324——E.Sleeping Schedule(DP+初始化)
codeforces1324——E.Sleeping Schedule(DP+初始化)
80 0
codeforces1324——E.Sleeping Schedule(DP+初始化)
|
Java Maven
仿写@ScheduleLock 定时任务
最近公司在搞分布式的定时任务, 怎么满足分布式的定时任务锁。 我看了大量的开源的代码。 https://github.com/lukas-krecan/ShedLock 感觉老外写的非常的不错。
仿写@ScheduleLock 定时任务
[P3074 | USACO13FEB] Milk Scheduling | SPFA最长路 | 超级源点 + 超级汇点
题意: 一共有n头奶牛,每头奶牛挤奶都会消耗一定的时间ti 然后有m 个关系,u − v,其含义是 u 必须在v 之前挤奶,而且有足够的人手多线程挤奶,问为这n 头奶牛挤完奶一共需要消耗多长时间
145 0
|
Java 调度
Leetcode-Medium 621. Task Scheduler
Leetcode-Medium 621. Task Scheduler
98 0
Leetcode-Medium 621. Task Scheduler