LCIS
LCIS
https://ac.nowcoder.com/acm/problem/51152
思路:
表示
与
可以构成以
为结尾的
的长度。
当时,
当时,
,显然需要满足
,因为
是以
为结尾的。
最后枚举为结尾的
的长度,找最大的。
MyCode:
#include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; const int maxn=1e5+7,maxm=2e5+7,mod=1e9+7; typedef long long int ll; typedef unsigned long long ull; int a[3005],b[3005],f[3005][3005]; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin>>n; for(int i=1;i<=n;++i) cin>>a[i]; for(int i=1;i<=n;++i) cin>>b[i]; for(int i=1;i<=n;++i) { int val(0); for(int j=1;j<=n;++j) { if(a[i]==b[j]) f[i][j]=val+1; else f[i][j]=f[i-1][j]; if(b[j]<a[i]) val=max(val,f[i-1][j]); } } int ans(0); for(int i=1;i<=n;++i) ans=max(ans,f[n][i]); cout<<ans<<'\n'; return 0; }
动态规划入门 文章被收录于专栏
能采用动态规划求解一般要具有3个性质: (1) 最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。 (2) 无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。 (3)有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(体现DP的优点)