您的位置:首页 > 其它

动态规划(DP),最长递增子序列(LIS)

2016-03-02 07:31 295 查看
题目链接:http://poj.org/problem?id=2533

解题报告:

状态转移方程:

dp[i]表示以a[i]为结尾的LIS长度

状态转移方程:

dp[0]=1;

dp[i]=max(dp[k])+1,(k<i),(a[k]<a[i])

#include <stdio.h>
#define MAX 1005

int a[MAX];///存数据
int dp[MAX];///dp[i]表示以a[i]为结尾的最长递增子序列(LIS)的长度

int main()
{
int i,j,n;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
dp[0]=1;
int Max=0;
for(i=1;i<n;i++)
{
int k=0;
for(j=0;j<i;j++)
{
if(a[j]<a[i]&&k<dp[j])
{
k=dp[j];
}
}
dp[i]=k+1;
}
for(i=0;i<n;i++)
{
if(Max<dp[i])
Max=dp[i];
}
printf("%d\n",Max);
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: