最长上升子序列。
怎么做呢?
不知道。
书上说用dp。
这样做的,
dp[i]:长度为i的递增子序列,末尾元素最小的值。
也就是说对于一个数列a,
可以得到如下状态转移方程:
dp[i]=a[j]>dp[i-1]?min(a[j],dp[i]):dp[i].
这样的话容易得到如下代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int inf,i,j,dp[1010],arr[1010],num;
scanf("%d",&num);
for(i=0;i<num;i++)
scanf("%d",&arr[i]);
memset(dp,127,sizeof(dp));
inf=dp[0];......
阅读全文