zoukankan      html  css  js  c++  java
  • 3.11日 训练B题

    题目大意是,从1到n有多少个数,是由两个以内的 个位数字 组成。

    写一个部分数据的代码可以发现,答案相对于输入的数据来说是挺小的。

    挨个判断时间不够

    排列组合,要单独考虑0,还有判断是否超出所给的n,太麻烦。

    所以我感觉较为简单的方法是,直接那两个数来进行排列,对数据n进行比较。最然看着每一个dfs里边都有九个循环,实际上能用的着的数据没几个。

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <queue>
    using namespace std;
    long long n,k,m,sum;
    bool vis[20];
    void dfs(long long num,int s)//两个参数,一个是当前数字大小,一个是用了几个数字了 
    {
        if(num>n)return ;
        for(int i=0;i<=9;i++)
        {
            if(s<2&&!vis[i])    //还有空位置 ,可用新数字 
            {
                vis[i]=1;
                dfs(num*10+i,s+1);
                vis[i]=0;
            }
            if(s<=2&&vis[i])//有没有空位置都可以用旧数字 
            {
                dfs(num*10+i,s);
            }
        }
        sum++;    //计数 
    }
    int main()
    {
        cin>>n;
        for(int i=1;i<=9;i++)
        {
            vis[i]=1;
            dfs(i,1);
            vis[i]=0;
        }
        cout<<sum;
    } 

    除特别注明外,本站所有文章均为Manjusaka丶梦寒原创,转载请注明来自出处

  • 相关阅读:
    AJAX初步学习
    MyBatis 中@param 的用法
    MyBatis 分页
    MyBatis 中一对一和一对多的映射关系
    MyBatis的增删改查。
    MyBatis配置文件
    java 中 “==” 和 equals 的区别
    点云格式-pcd
    VS2015+VisualSVN+TortoiseSVN安装及使用
    GIS中的引擎:地图引擎
  • 原文地址:https://www.cnblogs.com/rmy020718/p/14520722.html
Copyright © 2011-2022 走看看