题目链接:尼克的任务

这道题,有点难度,也不是太难,因为我都做出来了。

好,下面分析一下:

这道题,显然的动规,我们这样设计状态。

我们设d[i]为从第i分钟初开始到结束有多少空闲时间。

那么我们的转移方程也出来了:

如果第i分钟没有开始的任务,那么

d[i]=d[i+1]+1;

这很好理解,因为不需要做任务,那么空闲时间就是前一种状态的时间加上新增的1分钟。

如果有第i分钟开始的任务,那么:

d[i]=max{d[i+t[j]]},j为任务的标号

这应该好理解,因为如果有任务,那么尼克是需要做任务的,所以一定要选择一个任务来做。那么做任务的这段时间肯定没有空闲时间,所以直接跳到任务完成的时间状态。

下面给代码。

给代码之前,讲一下,我的这个代码是有前提的,就是任务的输入按时间是有序的,题目似乎没讲,但提交是能AC的。所以,如果真的考试,是需要先排一下序,然后就行了。这里就不加排序代码了。

#include<bits/stdc++.h>
using namespace std;
int n,k;
int main(){
scanf("%d%d",&n,&k);
int begin[k],t[k],vis[n+1];//vis用来存储这个时间点有没有任务
memset(vis,0,sizeof(vis));
for(int i=0;i<k;i++){
scanf("%d%d",&begin[i],&t[i]);
vis[begin[i]]=1; //1
}
int tail=k-1; //2
int d[n+2];
memset(d,-1,sizeof(d));
d[n+1]=0; //3
for(int i=n;i>=1;i--){
if(vis[i]==1){ //4
while(begin[tail]==i){ //7
d[i]=max(d[i],d[i+t[tail--]]); //5
}
}else{
d[i]=d[i+1]+1; //6
}
}
printf("%d",d[1]);
return 0;
}

今天讲7点(还是挺多的哈):

1处:读入开始时间,把对应时间点标为有任务。

2处:这是任务的序号,我们这里默认是有序的,所以可以用一个tail去处理任务序号。

3处:边界。

4处:如果有任务

5处:注意tail–,这里因为有序,所以序号后面的任务,一定已经执行过,所以不断推进就行。

6处:如果没任务,那么就直接加一。

7处:如果这个任务是这个时间开始的,那么就执行,注意我们加了一个循环,因为一个时间点有多个任务,所以我们需要不断执行。

尼克的任务(P1280)的更多相关文章

  1. 洛谷 P1280 尼克的任务题解

    题目链接:https://www.luogu.org/problem/P1280 题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每 ...

  2. 洛谷P1280 尼克的任务[DP]

    题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成. 尼克的一个工作日为N分钟,从第一分钟开始 ...

  3. P1280 尼克的任务

    题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成. 尼克的一个工作日为N分钟,从第一分钟开始 ...

  4. P1280 尼克的任务 线性DP

    题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成. 尼克的一个工作日为N分钟,从第一分钟开始 ...

  5. 洛谷P1280 尼克的任务 [DP补完计划]

    题目传送门 题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成. 尼克的一个工作日为N分钟,从 ...

  6. 洛谷P1280 && caioj 1085 动态规划入门(非常规DP9:尼克的任务)

    这道题我一直按照往常的思路想 f[i]为前i个任务的最大空暇时间 然后想不出来怎么做-- 后来看了题解 发现这里设的状态是时间,不是任务 自己思维还是太局限了,题做得太少. 很多网上题解都反着做,那么 ...

  7. P1280 尼克的任务[区间覆盖dp]

    题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成. 尼克的一个工作日为N分钟,从第一分钟开始 ...

  8. 洛谷P1280 尼克的任务【线性dp】

    题目:https://www.luogu.org/problemnew/show/P1280 题意: 给定k个任务的开始时间和持续时间要求在n时间内完成.问如何安排工作使得休息时间最多. 思路: 用d ...

  9. P1280 尼克的任务 /// DP(选择性地)

    题目大意: https://www.luogu.org/problemnew/show/P1280 题解 手推一遍思路更清晰 #include <bits/stdc++.h> using ...

随机推荐

  1. jenkin、SVN、archery集成openLDAP

    jenkins: 1.下载.安装插件 LDAP .Matrix Authorization Strategy 2. 系统管理 —> 全局安全配置 点击 启用安全,并且选择 LDAP 认证,这里有 ...

  2. zabbix监测公网IP的客户端主机

    未经测试 如果server端是内网的主机,需要注意:防火墙.端口映射 再用zabbix服务器去Telnet客户机的10050端口,然后在客户机中查看10050被什么ip访问了,拿到这个ip之后,加到之 ...

  3. Python之逻辑回归模型来预测

    建立一个逻辑回归模型来预测一个学生是否被录取. import numpy as np import pandas as pd import matplotlib.pyplot as plt impor ...

  4. pta l2-2(链表去重)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805072641245184 题意:给定一个链表,要求删除其中键 ...

  5. pta7-20 畅通工程之局部最小花费问题(Kruskal算法)

    题目链接:https://pintia.cn/problem-sets/15/problems/897 题意:给出n个城镇,然后给出n×(n-1)/2条边,即每两个城镇之间的边,包含起始点,终点,修建 ...

  6. 贪吃蛇GamePanel Java实现(二)

    package cn.tcc.snake.tcc.View; import java.awt.Color;import java.awt.Graphics; import javax.swing.JP ...

  7. 【资料整理】c#基础

    .net基础:.net与C# .net是一个平台 c#是一门语言 .net的用途a.桌面应用程序 b.网站应用程序 c.专业游戏开发(XBOX360) d.嵌入式设备软件开发 e.智能手机APP开发 ...

  8. java序列化的认识(从多本书和多个博客中的总结)

    Serializable接口是java.io下的一个标记接口,一个类要被序列化必须实现这个接口.

  9. 无法打开这些文件internet安全设置

    在安装别人传过来的软件的时候 出现这种情况 解决: 对这个程序,右键“属性”,可以看到属性窗口下方提示:此文件来自其它的电脑,可能不安全,后面有个按钮“解除锁定”

  10. Mac下IntelliJ的Git、GitHub配置及使用

    1.git简介 Git是目前流行的分布式版本管理系统.它拥有两套版本库,本地库和远程库,在不进行合并和删除之类的操作时这两套版本库互不影响.也因此其近乎所有的操作都是本地执行,所以在断网的情况下任然可 ...