子序列难题(梦里的难题)详解

目录

一,题目描述

二,难点解析


一,题目描述


    有 N个数字(由 1 到 K 组成),排成一列形成数字串,例如1,5,3,2,5,1,3,4,4,2,5,1,2,3 它包含了很多的子序列,


比如(5)、(1,3,2)、(1,5,3)、(3,4,1,3),请思考该列数字串不包含的最短的由 1 到 K 组成的的子序列长度是多少?


【输入】

第一行输入两个整数 N 和 K,接下来 N 行分别输入这 N 个数字


【输出】

一个整数表示原数字串中不包含的最短子序列长度


【样例输入】

14 5

1 5 3 2 5 1 3 4 4 2 5 1 2 3


【样例输出】

3


【样例解释】

所有的长度为 1 和为 2 的子序列都存在。

长度为 1 的子序列有:(1)、(2)、(3)、(4)、(5)

长度为 2 的子序列有:(1,1)、(1,2)、(1,3)、(1,4)、(1,5)、(2,1)、(2,2)、(2,3)、(2,4)、(2,5)、(3,1)、(3,2)、(3,3)、(3,4)、(3,5)、(4,1)、(4,2)、(4,3)、(4,4)、(4,5)、(5,1)、(5,2)、(5,3)、(5,4)、(5,5)

长度为 3 的序列不全都有,例如:(2,2,4)


二,难点解析

题目描述不完整难理解,去重桶

来源:aps
#include<iostream>
using namespace std;
//全部初始化
int s,l,hm,te,cnt;
bool z[10009];
int main(){
     
    cin>>s>>l;hm=l;
     
     //循环输入s次
    for(int j=1;j<=10010;j++){z[j]=0;}
    //chu shi hua;=0;
     //初始化,全部为零
    for(int i=1;i<=s;i++){cin>>te;
     
     //hm:计算是否完成一组,如果完成则归零
    if(z[te]==0){z[te]=1;hm--;}
     
     //遍历完一组后重置
    if(hm==0){cnt++;hm=l;for(int o=1;o<=10010;o++){z[o]=0;}}}
     
    //qu chong tong;
     //去重
    cout<<(cnt+1);
    return 0; 
} 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值