当前位置: 代码迷 >> 综合 >> rnqoj-90-未出现的子串-dp
  详细解决方案

rnqoj-90-未出现的子串-dp

热度:31   发布时间:2023-12-19 11:08:30.0

好题啊~~~

从后往前遍历。

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;
}