题目描述

尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成。

尼克的一个工作日为N分钟,从第一分钟开始到第N分钟结束。当尼克到达单位后他就开始干活。如果在同一时刻有多个任务需要完成,尼克可以任选其中的一个来做,而其余的则由他的同事完成,反之如果只有一个任务,则该任务必需由尼克去完成,假如某些任务开始时刻尼克正在工作,则这些任务也由尼克的同事完成。如果某任务于第P分钟开始,持续时间为T分钟,则该任务将在第P+T-1分钟结束。

写一个程序计算尼克应该如何选取任务,才能获得最大的空暇时间。

输入输出格式

输入格式:

输入数据第一行含两个用空格隔开的整数N和K(1≤N≤10000,1≤K≤10000),N表示尼克的工作时间,单位为分钟,K表示任务总数。

接下来共有K行,每一行有两个用空格隔开的整数P和T,表示该任务从第P分钟开始,持续时间为T分钟,其中1≤P≤N,1≤P+T-1≤N。

输出格式:

输出文件仅一行,包含一个整数,表示尼克可能获得的最大空暇时间。

输入输出样例

输入样例#1:

15 6
1 2
1 6
4 11
8 5
8 1
11 5
输出样例#1:

4

solution:
这道题首先看到的肯定是DP,是资源分配类型的DP。
首先这道题说的是尼克要挑选任务,其余同等时间内其他的任务就由同事来做,那么问题来了,当有任务时尼克应该如何挑选最优的任务
这时题目问啥我们就设啥,设dp[i]表示当前可以歇的最大时间
首先考虑的是DP的转移。枚举每一个时间,如果当前时间无任务,那么就是现在可以歇的时间=上一分钟可以歇的最大时间+1。
如果当前有任务,那么就要挑选当前时刻最优的任务,枚举每一个任务,如果当前有需要开始的任务,dp[i]=max(dp[i+wj],dp[i]),如果挑选当前任务,那么当前任务的代价就是执行的时间wj,就直接跳到wj+1的时间,如果不挑选,则无代价。
所以现在我们的dp方程就求出来了
  if !vis[i]//vis用来记录当前有无任务的开始
    dp[i] = dp[i-1]+1;
  else
  {
    for j -> k
    dp[i] = max(dp[i+wj],dp[i]);
  }
现在我们是从正向枚举的时间,但是我们从某谷上评测时,会发现

那么问题到底出现在哪呢?

如果正向枚举时间,他就会有时间性的跳跃,导致转移

嗯,大概就是这样,dp[i+wj]是空的

而你倒序枚举时间(请自行画图脑补),就会有时间性转移

算了,我手勤,图在下面

嗯,好了,剩下的就是代码了

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct edge
{
int sta,end,w;
}e[];
int n , k , dp[] , tot , vis[];
bool cmp(edge x,edge y)
{
return x.sta > y.sta;
}
int main()
{
cin >> n >> k;
for(int i = ;i <= k;i ++)
{
int w;
cin >> e[i].sta >>w;
e[i].end = w;
vis[e[i].sta]++;
}
sort(e+,e++n,cmp);
for(int i = n;i >= ;i --)
{
if(vis[i] == )
dp[i]=dp[i+]+;
else
{
for(int j = ;j <= k;j ++)
if(e[j].sta == i)
dp[i] = max(dp[i+e[j].end],dp[i]);
}
}
cout << dp[];
}

luogu 1280 尼克的任务的更多相关文章

  1. 水题挑战4: luogu P1280 尼克的任务

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

  2. 【Luogu】P1280尼克的任务(DP)

    做顺序DP做惯了,死活没想到这是个倒序DP. f[i]表示时刻i的最大空闲时.有以下两种可能. 1.时刻i没有任务.此时f[i]=f[i+1]+1; 2.时刻i有许多任务.此时f[i]=max(f[i ...

  3. 尼克的任务 dp 洛谷1280

    蒟蒻表示老久没看过dp题目了,,挺水的一道dp题目都没想出来,,, 首先设dp[i]表示从开始到i时间的最大空闲时间,用vector to[x] 表示从x点开始的任务结束时间,cnt[x]表示从x开始 ...

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

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

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

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

  6. tyvj1034 尼克的任务

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

  7. Luogu 魔法学院杯-第二弹(萌新的第一法blog)

    虽然有点久远  还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题  沉迷游戏,伤感情 #include <queue> ...

  8. luogu p1268 树的重量——构造,真正考验编程能力

    题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...

  9. TYVJ P1034 尼克的任务 Label:倒推dp

    背景 题库靠大家,人人都爱它. 描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成.尼克的一个工作 ...

随机推荐

  1. android:px,dp(dip),sp的差别

    1.px:表示屏幕的实际像素,比如320*480的屏幕在横向有320个像素,在纵向有480个像素,假设指定的某个空间的单位为px.那么在不同分辨率下的手机上.显示的都是指定的大小.一般不推荐使用px. ...

  2. UVA 436 - Arbitrage (II)(floyd)

    UVA 436 - Arbitrage (II) 题目链接 题意:给定一些国家货币的汇率.问是否能通过不断换货币使钱得到增长 思路:floyd,完事后推断一下有没有连到自己能大于1的情况 代码: #i ...

  3. 简单来说一下java中的泛型,ssh中dao层使用会简化代码量

    原来仅仅是听老师说泛型特别好用,但是后来一直弄android用的泛型就比較少了.但是感觉它真的非常重要,于是花了一下午的时间写了个demo.好,老规矩.上代码: 首先,sysout是个工具,可是用着不 ...

  4. leetcode题解||ZigZag Conversion问题

    problem: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of r ...

  5. Oracle分析函数ntile

    有这么一个需求.将课程的成绩分成四个等级,为学生打A.B.C.D的绩效. drop table course purge; create table course (   id number,   g ...

  6. 37、ifconfig命令

    很多windows很熟悉ipconfig命令行工具.它被用来获取网络接口配置信息并对此进行改动.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config). 通常须 ...

  7. js中callback执行

    <!DOCTYPE HTML> <html> <head> <meta charset="GBK" /> <title> ...

  8. 14.MongoDBUtils工具类

    1. public class DbUtils { public static MongoCollection<Document> getMongoCollection(String lo ...

  9. systemd服务管理---systemctl命令列出所有服务

    1.列出系统所有服务 #systemctl list-units --all --type=service

  10. 【DNN】 安装问题

    http://blog.csdn.net/hwt0101/article/details/9153083 这是IIS 注册的问题  IIS 在安装VS 之前就装上了,所以 没有注册是上 F4 从新卸载 ...