zoukankan      html  css  js  c++  java
  • hdu--1027-next_permutation||dfs

    ....连跪3把 真无语..

    写完这个 看电影去了..

    明天就去看 后会无期了 应该不会让人失望的

    -------------碎碎念

    这题 我一开始自己是用 dfs写的.. 后来看了下discuss 看到个新方法 使用stl中的next_permuntation 速度不仅快了许多 而且代码简洁..

    关于 这个的介绍 传送

    重点 我把它拿出来

    next_permutation函数的原理如下:


    在当前序列中,从尾端向前寻找两个相邻元素,前一个记为*i,后一个记为*t,并且满足*i < *t。然后再从尾端

    寻找另一个元素*j,如果满足*i < *j,即将第i个元素与第j个元素对调,并将第t个元素之后(包括t)的所有元

    素颠倒排序,即求出下一个序列了。

        touch   me

     1 #include <iostream>
     2 #include <cstring>
     3 using namespace std;
     4 
     5 int cnt , n , m;
     6 int arr[1010];
     7 bool vis[1010];
     8 
     9 void dfs(int pos)
    10 {
    11     if( cnt==m )
    12         return;
    13     if( pos==n )
    14     {
    15         cnt++;
    16         if( cnt==m )
    17         {
    18             for( int i = 0 ; i<n-1 ; i++ )
    19             {
    20                 cout << arr[i] << " ";
    21             }
    22             cout << arr[n-1] << endl;
    23         }
    24     }
    25     for( int i = 1 ; i<=n ; i++ )
    26     {
    27         if( !vis[i] )
    28         {
    29             arr[pos] = i;
    30             vis[i] = true;
    31             dfs( pos+1 );
    32             vis[i] = false;
    33         }
    34     }
    35 }
    36 
    37 int main()
    38 {
    39     while( cin >> n >> m )
    40     {
    41         memset( vis , false , sizeof(vis) );
    42         cnt = 0;
    43         dfs(0);
    44     }
    45     return 0;
    46 }
    View Code
     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 
     5 int arr[1010];
     6 int main()
     7 {
     8     int n , m;
     9     while( cin >> n >> m )
    10     {
    11         for( int i = 0 ; i<n ; i++ )
    12         {
    13             arr[i] = i+1;
    14         }
    15         while(--m)
    16         {
    17             next_permutation(arr,arr+n);
    18         }
    19         for( int i = 0 ; i<n ; i++ )
    20         {
    21             if(i<n-1)
    22                 cout << arr[i] << " ";
    23             else
    24                 cout << arr[i] << endl;
    25         }
    26     }
    27     return 0;
    28 }
    View Code

    today:

      在某个阶段,尤其当你寂寞太久的时候,有太多的冲动,把喜欢当成爱,把一秒当成永恒。然而如果不是这么地折腾,你也不会知道自己真的想要的是什么。每个人的青春里都有一条弯路,谁也没法替你走完,但未来总还在。

    just follow your heart
  • 相关阅读:
    P2824 [HEOI2016/TJOI2016]排序
    P4930「FJ2014集训」采药人的路径
    FlexboxLayout 的一些基本介绍与基本用法
    Android——打造万能适配器(CommonAdapter)
    关于list、set、map的几点总结
    equals()和hashCode()区别?
    Android开发艺术探索(一)——Activity的生命周期和启动模式
    Android开发艺术探索(三)——View的事件体系
    Android五大布局重新回顾
    Android基础知识回顾
  • 原文地址:https://www.cnblogs.com/radical/p/3863865.html
Copyright © 2011-2022 走看看