递增子序列最大和(最长递增子序列) 动态规划
2018-03-20 18:31
211 查看
对于上面的动态规划以第2个问题为例:
最长递增子序列:dp[i]
状态:以i为自增序列结尾的最大长度为dp[i];
决策:从第i个往前找,找到a[j]<a[i],dp[i]=max(dp[i],dp[j]+1);(dp[j]表示符合条件的i前面的一个以j为结尾的最大长度)
符合无后效性
初始状态:dp[i]=1;#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#define INF 0x3f3f3f3f
#define PI 3.14159
#define N 1010
#define MOD 9997
using namespace std;
int dp
,a
;
int main()
{
int n,ans;
while(~scanf("%d",&n))
{
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
{
dp[i]=1;
for(int j=i-1;j>=0;j--)
{
if(a[j]<a[i])
dp[i]=max(dp[i],dp[j]+1);
}
}
ans=-1;
for(int i=0;i<n;i++)
{
ans=ans>dp[i]?ans:dp[i];
}
cout<<ans<<endl;
}
}
至于第一个问题只需把动态规划公式的1改为a[i]即可;
最长递增子序列:dp[i]
状态:以i为自增序列结尾的最大长度为dp[i];
决策:从第i个往前找,找到a[j]<a[i],dp[i]=max(dp[i],dp[j]+1);(dp[j]表示符合条件的i前面的一个以j为结尾的最大长度)
符合无后效性
初始状态:dp[i]=1;#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#define INF 0x3f3f3f3f
#define PI 3.14159
#define N 1010
#define MOD 9997
using namespace std;
int dp
,a
;
int main()
{
int n,ans;
while(~scanf("%d",&n))
{
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
{
dp[i]=1;
for(int j=i-1;j>=0;j--)
{
if(a[j]<a[i])
dp[i]=max(dp[i],dp[j]+1);
}
}
ans=-1;
for(int i=0;i<n;i++)
{
ans=ans>dp[i]?ans:dp[i];
}
cout<<ans<<endl;
}
}
至于第一个问题只需把动态规划公式的1改为a[i]即可;
相关文章推荐
- 动态规划——最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串最小编辑距离日记整理
- 动态规划实现最大连续子序列和,最长不下降子序列和最长公共子序列
- 【C】动态规划--最大连续子序列和/最长不下降子序列/最长公共子序列/最长回文子串/DAG最长路
- 最大子序列最长递增子序列最长公共子串最长公共子序列
- 【串和序列处理 7】LIS 最长递增子序列
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 动态规划(背包问题,最长递增子序列,硬币问题)java实现
- 动态规划——最大递增子序列
- 设计一个O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。
- 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不
- 最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和
- 最长递增子序列的求解(O(n*n),O(nlogn))——动态规划
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离【转载】
- 【动态规划】LIS最长单调递增子序列 logn算法 并且输出子序列
- 【C++】动态规划:最长递增子序列和建桥问题
- 最大连续子序列和,乘积,最长递增子串,最长公共子串,子序列等问题(动态规划等)
- 动态规划4:LIS最长递增子序列问题
- 最长递增子序列之我的第一个动态规划
- 动态规划-最长连续子序列和与最大子矩阵
- 最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和