luogu P1280 尼克的任务 序列DP

我们发现,我们从前往后DP有苦难,因为现在的选择存在后效性。

如果我们从后向前DP,f[i]表示从i时刻到下班的最小工作时间,从后向前转移,则不存在后效性问题。

 1 #include <cstdio>
 2 #include <vector>
 3 using namespace std;
 4 vector <int> vec[10010];
 5 int f[10010];
 6 int n,k;
 7 int main()
 8 {
 9     scanf("%d%d",&n,&k);
10     int tx,ty;
11     for (int i = 1;i <= k;i++)
12     {
13         scanf("%d%d",&tx,&ty);
14         vec[tx].push_back(ty);
15     }
16     for (int i = n;i >= 1;i--)
17     {
18         if (!vec[i].size()) f[i] = f[i + 1] + 1;
19         for (int o = 0;o < vec[i].size();o++)
20             f[i] = max(f[i],f[i + vec[i][o]]);
21     }
22     printf("%d\n",f[1]);
23     return 0;
24 }

原文地址:https://www.cnblogs.com/iat14/p/10566072.html

时间: 2024-10-09 22:22:14

luogu P1280 尼克的任务 序列DP的相关文章

洛谷 P1280 尼克的任务 ( 线性DP )

题意 :  尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成.尼克的一个工作日为N分钟,从第一分钟开始到第N分钟结束.当尼克到达单位后他就开始干活.如果在同一时刻有多个任务需要完成,尼克可以任选其中的一个来做,而其余的则由他的同事完成,反之如果只有一个任务,则该任务必需由尼克去完成,假如某些任务开始时刻尼克正在工作,则这些任务也由尼克的同事完成.如果某任务于第P分钟开始,持续时间为T分钟,则该任务将

P1280 尼克的任务(DP)

题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成. 尼克的一个工作日为N分钟,从第一分钟开始到第N分钟结束.当尼克到达单位后他就开始干活.如果在同一时刻有多个任务需要完成,尼克可以任选其中的一个来做,而其余的则由他的同事完成,反之如果只有一个任务,则该任务必需由尼克去完成,假如某些任务开始时刻尼克正在工作,则这些任务也由尼克的同事完成.如果某任务于第P分钟开始,持续时间为T分钟,则该任务将

Luogu P1280 尼克的任务题解

思路 首先我们需要知道主角可以休息的最多的时间,那么我们可以设\(dp[i]\)为第\(i\)分钟可以休息的最大时间那么我们可以发现假如第\(i\)分钟没有主角没有任何任务,那么主角就可以放心休息转移方程为\(dp[i] = dp[i + 1] + 1\).如果主角在当前第\(i\)分钟里面有任务那么在\(i \sim i + t - 1\)这段时间里面就别想休息了(\(t\)为当前任务的时间).所以我们可以得到转移方程为\(dp[i] = dp[i + t]\) 最后注意一下枚举的顺序就可以了

luogu P1026 统计单词个数 序列DP

dp[i][k]表示,在i及i左侧,分成k块,的最大单词数目. w[i][j]表示,在[i,j],内部多少个单词在此区间开始和结束. 转移方程为dp[i][k] = max(dp[j][k - 1] + w[j + 1][i]) 通过考虑每个单词的结束而非开始,而避开后后效性问题. 如果某个单词是另一个单词的前缀,则另一个单词无需考虑. 字符串处理的有问题,调了挺久的.... 1 #include <cstdio> 2 #include <cstring> 3 #include &

【学习】序列DP

做了也有一段时间的序列DP了,发现了一些规律 如果有两个字符串,一般来说,f[i][j]表示S串到第i位,T串到第j位. 如果lenS==lenT,可能可以优化到1维. 如果只有1个序列的话,一般来说f[i]表示到第i位的状态. 有一些特殊的东西:最长回文子序列是把原串倒过来然后做一遍最长公共子序列,检查一下奇偶性×2即可. 然后呢还有最长回文子串有个manacher算法来着改天要去看看. BZOJ上的题好像只做了一道呀= =好像是带计数的数列DP呀,用容斥原理搞一下就好咯. 感觉自己还是很弱还

序列DP(输出有要求)

DP Time Limit:10000MS     Memory Limit:165888KB     64bit IO Format:%lld & %llu Submit Status Description 对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < xm)且( ax1 < ax2 < … < axm).那么就称P为S的一个上升序列.如果有多个P满足条件,那么我们想求字典

Tyvj P1034 尼克的任务 (DP)

背景 Background 题库靠大家,人人都爱它. 描述 Description 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成. 尼克的一个工作日为N分钟,从第一分钟开始到第N分钟结束.当尼克到达单位后他就开始干活.如果在同一时刻有多个任务需要完成,尼克可以任选其中的一个来做,而其余的则由他的同事完成,反之如果只有一个任务,则该任务必需由尼克去写成,假如某些任务开始时刻尼克正在工作,则这些任务

2014 Super Training #10 D 花生的序列 --DP

原题: FZU 2170 http://acm.fzu.edu.cn/problem.php?pid=2170 这题确实是当时没读懂题目,连样例都没想通,所以没做了,所以还是感觉这样散漫的做不好,有些题目明明很简单,却因为没看懂而放弃了,甚至去玩了,这样达不到太大的效果. 解法: 定义: dp[i][j]:前i个字母中有j个是属于第一个序列的标号方案种数. 则当遇到'B'时,因为要满足WB依次间歇出现,所以前面属于第一个序列的个数应该为奇数,即j&1时转移.当属于第二个序列的个数为奇数时((i-

FOJ 2170 花生的序列 dp

marketplace是Eclipse发布的一个类似AppStore一样的插件和应用平台,可以从中安装Eclipse插件等.有些旧版本的Eclipse没有安装marketpalace. 一.   marketplace的安装 打开 Eclipse,菜单栏 Help -- Install New Software,弹出 install 窗口,在 Work with 中输入 http://download.eclipse.org/releases/indigo,等待获取插件内容.然后找到 然后 Ne