zoukankan      html  css  js  c++  java
  • 子序列(超级水)

     

    题目:求一个数列的子序列(超级水)

      应试做法:

        Dfs:枚举长度,开头为第一个,但是对于序列中的每一个数有两种选择,选与不选  

        边界判断:假使数列已经枚举到结尾了,可是还不够,退出

             如果队列到了结尾,正好没有这时候枚举的自序列长度正好为所需要的长度,输出合法的子序列

        代码

        

    #include<vector>
    #include<stdio.h>
    #include<stdlib.h>
    #define FORa(i,s,e) for(int i=s;i<=e;i++)
    #define FORs(i,s,e) for(int i=s;i>=e;i--)
    
    using namespace std;
    const int N=1000;
    int n,fn,a[N+1],b[N+1];
    vector<int> sta;
    vector<int>::iterator it;
    void Dfs(int sp,int cnt)
    {
        if(sp>n&&cnt>0) return;
        if(cnt==0)
        {
            FORa(i,0,sta.size()-1) printf("%d ",sta[i]);
            printf("
    ");
            return;
        }
        Dfs(sp+1,cnt);
        sta.push_back(a[sp]),Dfs(sp+1,cnt-1),it=sta.end(),sta.erase(it-1);
    }
    int main()
    {
        scanf("%d",&n);
        FORa(i,1,n) scanf("%d",&a[i]);
        FORa(i,1,n) fn=i,Dfs(1,i);
        return 0;
    }

  • 相关阅读:
    brctl 使用说明
    Flash文件系统介绍和平台采用squashfs+ubifs原因
    xargs
    svn的常用命令
    shell中的if用法
    shell中单双引号
    删除文件中的 ^M 字符
    博客园添加live2d看板娘
    IOS 自定义转场动画
    rails
  • 原文地址:https://www.cnblogs.com/SeanOcean/p/11261943.html
Copyright © 2011-2022 走看看