poj 2533 动态规划 最长子序列
来源:互联网 发布:js如何给div赋id 编辑:程序博客网 时间:2024/06/13 11:10
#include<iostream>#include<cstring>using namespace std;int num[1010],d[1010];int DP(int i){int max=0,j;if(d[i]==0){for( j=0;j<i;j++){if(num[j]<num[i]){if(max<DP(j))max=DP(j);}}d[i]=1+max;}return d[i];}int main(){int n,max=0;int i;cin>>n;memset(d,0,sizeof(d));for( i=0;i<n;i++)cin>>num[i];for(i=0;i<n;i++){if(max<DP(i))max=DP(i);}cout<<max<<endl;return 0;}
求最长满足要求的子序列是动态规划的典型例题,重点在于dp[i]的含义,他表示必须以第i个元素结尾的递增的最长子序列的长度,然后对i之前的元素循环,表示倒数第二个元素必须是num[j],递增则等于dp[j]+1,否则dp[i]=1;最后求出dp的值,比较找出最大的。
<pre name="code" class="cpp">#include<iostream>using namespace std;int main(){int n,num[1010],i,j,dp[1010],temp,max,max1;cin>>n;for(i=1;i<=n;i++)cin>>num[i];dp[1]=1;for(i=2;i<=n;i++){max=-1;for(j=1;j<i;j++){if(num[i]>num[j])temp=dp[j]+1;elsetemp=1;if(max<temp)max=temp;}dp[i]=max;}max1=dp[1];for(i=1;i<=n;i++){if(max1<dp[i])max1=dp[i];}cout<<max1<<endl;return 0;}
0 0
- poj 2533 动态规划 最长子序列
- 经典动态规划问题--最长上升子序列 POJ--2533
- POJ 2533 最长上升子序列 [动态规划 + 二分搜索]
- 动态规划----最长子序列
- 【最长子序列 动态规划】
- 动态规划----最长子序列
- 最长子序列--动态规划
- POJ 1458(最长公共子序列 动态规划) 解题报告
- poj 1458 动态规划解最长公共子序列问题
- POJ 1458简单的动态规划:求最长子序列
- poj 1836 Alignment 最长子序列的动态规划
- poj 1836 (动态规划之最长上升子序列)
- POJ 1159 Palindrome(动态规划:最长回文子序列)
- POJ 1458/HDU 1159 最长公共子序列 (动态规划)
- 动态规划(线性模型):POJ 2533 最长上升子序列
- POJ-2533-Longest Ordered Subsequence-最长递增子序列-动态规划
- //POj 2533 Longest Ordered Subsequence(动态规划:最长不减子序列)
- [动态规划]之裸lis之最长上升子序列POJ 2533
- hdu 4858 项目管理(STL容器)
- HDU4283——You Are the One(区间DP)
- 彻底解决Android因加载多个大图引起的OutOfMemoryError,内存溢出的有关问题
- 使用Flume Log4j Appender正确的姿势
- LaTeX新人教程,30分钟从完全陌生到基本入门
- poj 2533 动态规划 最长子序列
- c语言之————有头循环双链表(公用par)
- Genymotion shell命令
- vs2008编译通过,ndk编译有undefined reference to的错误
- HDU 1316 —How many Fibs?
- scd-link移植的代码流程
- 大小端、网络字节序问题
- 基于ASP.NET的网上订餐系统的开发与实现
- centos7.0的几个新特性