或许更好的阅读体验

Sleeping Schedule

思路

这道题读题就感觉像时DPDPDP,读完题后更加坚定了,这是一道DPDPDP题目。

我们考虑状态转移方程,dp[i][j]dp[i][j]dp[i][j]表示在第iii次入睡时间是jjj的时候的时间最优值,所以显然有我们的状态转移方程就是

dp[i][(j+a[i])%n]=max((dp[i][j+a[i])%n),dp[i−1][j]+1dp[i][(j + a[i]) \% n] = max((dp[i][j + a[i]) \% n), dp[i - 1][j] + 1dp[i][(j+a[i])%n]=max((dp[i][j+a[i])%n),dp[i−1][j]+1,这里的j枚举的是上一次入睡的时间,因为是睡一天嘛,所以下一次睡觉的时间就是(j+a[i])%b(j + a[i]) \% b(j+a[i])%b

当然这里并没有考虑完备,因为我们还有一个时间时是(j+a[i]−1)%n(j + a[i] - 1) \% n(j+a[i]−1)%n,但是转移过程跟上面是一样的,这里就不多列式子了。

接下来我在代码里说一些我wa过得坑点。

代码

#include <bits/stdc++.h>using namespace std;typedef long long ll;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();} while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}const int N = 2e3 + 10;int dp[N][N], a[N], n, h, l, r;int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false);n = read(), h = read(), l = read(), r = read();for(int i = 1; i <= n; i++)a[i] = read();memset(dp, -1, sizeof dp);//初始化,dp[0][0] = 0;//只有这个状态是合理的,所以初始化为0.for(int i = 1; i <= n; i++)for(int j = 0; j < h; j++) {//昨天是在j时入睡的,if(dp[i - 1][j] < 0)    continue;//只能从上面一个合理的状态转移过来,所以上一个状态一定要满足是>= 0的,if((a[i] + j) % h >= l && (a[i] + j) % h <= r)//隔a[i]dp[i][(a[i] + j) % h] = max(dp[i][(a[i] + j) % h], dp[i - 1][j] + 1);elsedp[i][(a[i] + j) % h] = max(dp[i][(a[i] + j) % h], dp[i - 1][j]);if((a[i] + j - 1) % h >= l && (a[i] + j - 1) % h <= r)//隔a[i] - 1dp[i][(a[i] + j - 1) % h] = max(dp[i][(a[i] + j - 1) % h], dp[i - 1][j] + 1);elsedp[i][(a[i] + j - 1) % h] = max(dp[i][(a[i] + j - 1) % h], dp[i - 1][j]);}int ans = 0;for(int i = 0; i < h; i++)//从0 ~ h - 1枚举,并不是1 ~ n,这点一定注意。ans = max(ans, dp[n][i]);printf("%d\n", ans);return 0;
}

E:Sleeping Schedule(DP)相关推荐

  1. HDU 6170 2017 多校训练:Two strings(DP)

    题意: 给你两个字符串:第一个字符串只包含小写大写字母 第二个字符串除了字母之外,还有'.'和'*',其中'.'可以当成任意一个字符,'*'表示前面那个字符可以重复若干次 当然也可以重复0次,例如a. ...

  2. HDOJ-2062 :Subset sequence(DP)

    题目:求子集序列 Consider the aggregate An= { 1, 2, -, n }. For example, A1={1}, A3={1,2,3}. A subset sequen ...

  3. python【数据结构与算法】程序设计:划分整数(DP)

    蒜头君特别喜欢数学.今天,蒜头君突发奇想:如果想要把一个正整数 nnn 分解成不多于 kkk 个正整数相加的形式,那么一共有多少种分解的方式呢? 蒜头君觉得这个问题实在是太难了,于是他想让你帮帮忙. ...

  4. E:K-periodic Garland(DP)

    思路 每个点我们有两种决策,其值为0或1: 如果点我们放置0的话,我们有其前一位数字是零,或者其前一位数字是一. 如果这个点我们放置1的话,我们有其前面是按照每k个数字都出现一次1的排列,也有可能其前 ...

  5. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  6. 设计模式:享元(FlyWeight)模式

    设计模式:享元(FlyWeight)模式 一.前言     享元(FlyWeight)模式顾名思义,既是轻量级的,原因就是享元,共享元素,这里的元素指的是对象.如何共享对象,那就是在检测对象产生的时候 ...

  7. LeetCode 1981. 最小化目标值与所选元素的差(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个大小为 m x n 的整数矩阵 mat 和一个整数 target . 从矩阵的 每一行 中选择一个整数,你的目标是 最小化 所有选中元素之 和 与 ...

  8. LeetCode 1824. 最少侧跳次数(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 n 的 3 跑道道路 ,它总共包含 n + 1 个 点 ,编号为 0 到 n . 一只青蛙从 0 号点第二条跑道 出发 ,它想要跳到点 n ...

  9. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

最新文章

  1. windows opensshd 连接就close_基于Windows白名单执行Payload上线Metasploit 渗透红队笔记...
  2. mongodb不等于某个值_MongoDb进阶实践之四 MongoDB查询命令详述
  3. 不是微型计算机主板上的部件,微型计算机主板上安装的主要部件
  4. 小程序 座位管理系统(一)(纯前端)
  5. MySQL批量SQL插入性能优化
  6. winfrom 点击按钮button弹框显示颜色集
  7. 可以买的一本书:3D计算机图形学(原书第3版)
  8. php中,多维数组是什么意思,在PHP中回显多维数组
  9. 约瑟芬公主把乔治放在了第三位,对吧
  10. 金额大小写转换(2)
  11. php buildconf,PHP Extension开发 Unix Build System配置 conf
  12. WIFI WDS不同应用模式简介
  13. 阿里云上云迁移工具案例实践:腾讯云迁移到阿里云
  14. android的退格字符,按键安卓版如何实现退格键功能
  15. 前端必会的 HTML+CSS 常用技巧 之 虚线的实现方式
  16. RK3588平台开发系列讲解(DisplayPort篇)DP相关模式说明
  17. WIN10下调用waveInOpen方法失败返回错误1的解决方法
  18. 线性表顺序存储的一些操作(初始化,添加,删除)
  19. 阿里大文娱——优酷场景化营销
  20. 开源CMS框架整理收集

热门文章

  1. 在杭州,吃过这60样东西,人生才算完美!
  2. 2017年终奖发放,程序员人均11776元排名第一!
  3. 明天放假,我放价!一个国庆假期教你学会数学建模
  4. Spark的基本架构
  5. 一些常用的SAS命令
  6. linux系统管理命令使用,Linux系统管理使用之基本命令(1)
  7. 一个问题让我直接闭门思过!!!拼多多面试必问项之List实现类:LinkedList
  8. matlab如何求矩阵的转置矩阵,怎么用MATLAB程序求转置矩阵?急需,高手帮忙………………...
  9. 两向量点乘坐标运算_高三数学冲刺复习之向量小题的题型总结(含好用的补充公式)...
  10. c#程序设计教程 唐大仕pdf_C# 添加PDF水印