hdu 1087&1160 最长增序列问题
Posted iEdson
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 1087&1160 最长增序列问题相关的知识,希望对你有一定的参考价值。
假期第二天,继续dp计划
这两题都可以看作求最长增序列的长度,只不过题二换做了求这个序列的值
这里有个通式
最优子结构
F(r) = max(F(r),F(i)+1) 仅当(0<r<i<n&&a[r]<a[i])
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int MAXN = 1e3; typedef __int64 ll; int a[MAXN+10]; ll dp[MAXN+10];//记录改点出发的最大子数组 int main() { int n; while(scanf("%d",&n),n){ for(int i=0;i<n;i++){ scanf("%d",&a[i]); dp[i] = a[i]; } for(int i=n-2;i>=0;i--){ for(int j=i+1;j<n;j++){ if(a[i]<a[j]){ dp[i] = max(dp[i],a[i]+dp[j]); } } } ll maxn = -MAXN; for(int i=0;i<n;i++) maxn = max(maxn,dp[i]); cout<<maxn<<endl; } //cout << "Hello world!" << endl; return 0; }
以上是关于hdu 1087&1160 最长增序列问题的主要内容,如果未能解决你的问题,请参考以下文章
HDU 1160 FatMouse's Speed DP题解
HDU 1160 FatMouse's Speed (最长上升子序列)
FatMouse's Speed HDU - 1160 最长上升序列,