DP专题

Posted wzztabaorz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DP专题相关的知识,希望对你有一定的参考价值。

一、奶牛的锻炼(exer.c/.cpp/.pas)



Description:
奶牛 Bessie 有 N 分钟时间跑步,每分钟她可以跑步或者休息。若她在第 i 分钟跑步,可以跑
出 D_i 米,同时疲倦程度增加 1(初始为 0)。若她在第 i 分钟休息,则疲倦程度减少 1。无
论何时,疲倦程度都不能超过 M。另外,一旦她开始休息,只有当疲惫程度减为 0 时才能
重新开始跑步。在第 N 分钟后,她的疲倦程度必须为 0。
Input:
输入文件名为(exer.in)。
第一行,两个整数,代表 N 和 M。 接下来 N 行,每行一个整数,代表 D_i。
Output
输出文件名为(exer.out)。
Bessie 想知道,她最多能跑的距离。
exer.in
5 2
5 3 4 2 10
exer.out
9
Hint
N < = 2000 , M < = 500 , D_i < = 1000


二、不等数列(seq.c/.cpp/.pas)



Description:
将 1 到 n 任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”。问
在所有排列中,有多少个排列恰好有 k 个“<”。答案对 2012 取模。
Input
输入文件名为(seq.in)。
第一行 2 个整数 n,k。
Output
输出文件名为(seq.out)。
一个整数表示答案。
seq.in
5 2
seq.out
66
Hint
对于 30%的数据:n <= 10
对于 100%的数据:k < n <= 1000


三、清理垃圾(clean.c/.cpp/.pas)



Description:
Candy 家里总共有 n 个垃圾等待处理,每个垃圾对于 Candy 和飘飘乎居士处理的时间都是不
同的,而且每个垃圾只需要一个人处理。当然,Candy 和飘飘乎居士可以同时处理不同的垃
圾。记两人中耗费最长时间为最后总时间。Candy 希望能够尽快的处理完所有的垃圾,因此,
他想要知道处理完这些垃圾最少需要耗费多少时间?
Input
输入文件名为(clean.in)。
第一行一个正整数 n,表示一共有 n 个垃圾需要处理
接下来一个 2*n 的矩阵。
矩阵第一行第 i 个数表示 candy 处理第 i 个垃圾所需消耗的时间
矩阵第二行第 i 个数表示飘飘乎居士处理第 i 个垃圾所需消耗的时间
Output
输出文件名为(clean.out)。
一行,最后耗费的时间
clean.in
5
2 4 1 4 5
2 1 3 4 1
clean.out
5
Hint
Candy 完成垃圾 3 与垃圾 4 的清理,耗时为 5
飘飘乎居士完成垃圾 1 2 5 的清理,耗时为 4,由于 Candy 耗费的时间较长,所以记 Candy
耗费时间为最后总时间,所以最后答案为 5。
·对于 30%的数据
0 < n<=30
对于 100%的数据 0< n<=1000,Candy 和飘飘乎居士处理每个垃圾的时间<=10,对任何一个人
处理所有垃圾时间总和<=4000


四、序列 DP(xl.in/.out)



(1)最长上升子序列 LIS
输入 n 及一个长度为 n 的数列,求出此序列的最长上升子序列长度。上升子序列指的
是对于任意的 i<j 都满足 ai<aj 的子序列。(1<=n<=1000,0<=ai<=1000000)
样例输入:
5
4 2 3 1 5
样例输出:
3(最长上升子序列为 2, 3, 5)

以上是关于DP专题的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode dp专题

算法竞赛专题解析(15):DP应用--状态压缩DP

算法竞赛专题解析(15):DP应用--状态压缩DP

动态规划专题

dp专题

动态规划专题——数位DP