好题啊~~~
从后往前遍历。
dp[i]:代表以i为开头,最长能表示的长度。
假如某时刻dp[i]=x,那么要求所有的dp[x](1<=x<=q)都大于等于x-1;
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int a[100010];
int dp[11];
int main()
{int n,q,i,j;scanf("%d%d",&n,&q);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=n-1;i>=0;i--){int x=a[i];int ms=10000000;for(j=1;j<=q;j++){ms=min(dp[j],ms);}dp[x]=ms+1;}int ms=1000000;for(i=1;i<=q;i++){ms=min(dp[i],ms);}cout<<ms+1<<endl;return 0;
}