首页 > 其他分享 >E. Sleeping Schedule(记忆化搜索)

E. Sleeping Schedule(记忆化搜索)

时间:2023-02-13 16:44:05浏览次数:54  
标签:const Schedule int dfs t1 搜索 && return Sleeping

题目

题意

  • 输入 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));
  • 观察每个数字转移的时候,可以减一或者不减一,那么很明显,对于一个中间阶段有太多的重复到达的方式
  • 所以记忆化搜索很容易写,也可以直接递推[https://codeforces.com/blog/entry/74714](官方题解)

代码

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;
}

标签:const,Schedule,int,dfs,t1,搜索,&&,return,Sleeping
From: https://www.cnblogs.com/cfddfc/p/17116888.html

相关文章

  • DAG的深度优先搜索标记
    一、知识对于在图G上进行深度优先搜索算法所产生的深度优先森林Gt,我们可以定义四种边的类型:1.树边(TreeEdge):为深度优先森林中Gt的边。如果结点v是因算法对边(u,v)的搜索而......
  • python常用的搜索字符内容函数详解:re.findall/findfiter
    区别findall返回listfinditer返回一个MatchObject类型的iterator详细举例介绍1、findall在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返......
  • 第三章 图论与搜索三
    最小生成树最小生成树:由n个节点,和n-1条边构成的无向连通图被称为G的一颗生成树,在G的所有生成树中,边的权值之和最小的生成树,被称为G的最小生成树。(换句话说就是用最小的代......
  • 基于Astar算法的栅格地图目标最短路径搜索算法MATLAB仿真,带GUI界面
    1.算法描述Astar算法是一种图形搜索算法,常用于寻路。它是个以广度优先搜索为基础,集Dijkstra算法与最佳优先(bestfit)算法特点于一身的一种算法。它通过下面这个函数来......
  • 基于GA算法的TSP最短路径搜索matlab仿真
    1.算法描述(1)编码:将问题的候选解用染色体表示,实现解空间向编码空间的映射过程。遗传算法不直接处理解空间的决策变量,而是将其转换成由基因按一定结构组成的染色体。编码方式......
  • 第三章 图论与搜索二
    最短路问题常见的最短路问题可以分成两大类单源最短路多源汇最短路在最短路问题中,源点 也就是 起点,汇点 也就是 终点单源最短路单源最短路,指的是求一个点,到其......
  • 第三章 图论与搜索一
    普通DFS与BFS概述DFS:深度优先搜索(Depth-First-Search)BFS:宽度优先搜索(Breadth-First-Search)DFS和BFS的对比DFS使用栈(stack)来实现,BFS使用队列(queue)来实现DFS所需要......
  • 基于Astar算法的栅格地图目标最短路径搜索算法MATLAB仿真,带GUI界面
    1.算法描述       Astar算法是一种图形搜索算法,常用于寻路。它是个以广度优先搜索为基础,集Dijkstra算法与最佳优先(bestfit)算法特点于一身的一种算法。它通过......
  • 基于GA算法的TSP最短路径搜索matlab仿真
    1.算法描述(1)编码:将问题的候选解用染色体表示,实现解空间向编码空间的映射过程。遗传算法不直接处理解空间的决策变量,而是将其转换成由基因按一定结构组成的染色体。编码方......
  • 【DFS】LeetCode 108. 将有序数组转换为二叉搜索树
    题目链接108.将有序数组转换为二叉搜索树思路类似于二分搜索,定位到数组中间mid,然后左边的子数组构成左子树,右边的子数组构成右子树,mid处的数字构成根结点。递归构建......