DP、背包详解

动态规划,俗称DP,是算法进阶中很重要的问题。

解DP题,一般有这么几个步骤:

1.打表,在DP中,打表为了让我们更快的发现规律

2.根据你所列出的规律,写出状态转移方程式,如果状态转移方程写错了,那么一道题的思路就错了。

那么,根据以上DP方法,可以看一道例题:

信息学奥赛一本通(C++版)在线评测系统

一个数的序列bibi,当b1<b2<...<bSb1<b2<...<bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1,a2,...,aN)(a1,a2,...,aN),我们可以得到一些上升的子序列(ai1,ai2,...,aiK)(ai1,ai2,...,aiK),这里1≤i1<i2<...<iK≤N1≤i1<i2<...<iK≤N。比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等等。这些子序列中最长的长度是4,比如子序列(1,3,5,8)。

你的任务,就是对于给定的序列,求出最长上升子序列的长度。

求最长上升子序列,可以打出以下表格:

0 1 2 3 4 5 6
1 2 2 3 4 3 3

那么就是在这些表格的数中选出最大的,那么肯定是4个,故答案为4。

上面的过程可以如此实现:开两个区间指针i,j,让j<=i,那么只要j<=i并且dp[j]<dp[i],就形成了一个上升子序列,最后,只要在dp数组中选最大的,就是答案。

代码:

#include<bits/stdc++.h>
using namespace st
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值