Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 36143 | Accepted: 15876 |
Description
Input
Output
Sample Input
7 1 7 3 5 9 4 8
Sample Output
4
题意:求lis思路:dp[i]=max{dp[i],dp[j]+(a[i]>a[j])},ans=max{dp[i]},注意是dp[i]的最大值而不是dp[N]
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<stdlib.h> using namespace std; const int maxn=1000100; int N; int a[maxn]; int dp[maxn]; int main() { scanf("%d",&N); for(int i=1;i<=N;i++){ scanf("%d",&a[i]); dp[i]=1; } for(int i=2;i<=N;i++){ for(int j=1;j<i;j++){ if(a[j]<a[i]) dp[i]=max(dp[i],dp[j]+1); } } int ans=1; for(int i=1;i<=N;i++){ //注意并不是dp[N]最大,而是要找出dp[i]的最大值才是答案,不理解就打表 if(dp[i]>ans) ans=dp[i]; } printf("%d\n",ans); return 0; }
原文:http://www.cnblogs.com/--560/p/4354338.html