zoukankan      html  css  js  c++  java
  • hdu 2160 Sequence one(DFS)

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 #include <cstdio>
     5 #include <memory.h>
     6 using namespace std;
     7 #define MAXN 20002
     8 
     9 
    10 //适用于正整数
    11 template <class T>
    12 inline void scan_d(T &ret) {
    13     char c; ret=0;
    14     while((c=getchar())<'0'||c>'9');
    15     while(c>='0'&&c<='9') ret=ret*10+(c-'0'),c=getchar();
    16 }
    17 
    18 int a[1010];
    19 int cnt;
    20 int ans[1010];
    21 int tot;
    22 int n, k;
    23 int flag;
    24 
    25 int check(int i,int j)           //检查是否有出现过的数字
    26 {
    27     while (i < j)
    28         if (a[i++] == a[j])
    29         return 0;
    30     return 1;
    31 }
    32 
    33 void dfs(int now, int num)
    34 {
    35     int i;
    36     if (num == tot) {
    37         ++cnt;
    38         for (i = 0;i < tot-1; ++ i)
    39             printf("%d ",ans[i]);
    40         printf("%d
    ",ans[tot-1]);
    41         if (cnt == k) flag = 1;
    42         return;
    43     }
    44     if (num == 0) {                              //第一次不存在前一个数,特殊处理
    45         for (i = 0;i < n; ++ i) {
    46             if (check(0,i)) {
    47                 ans[num] = a[i];
    48                 dfs(i,1);
    49                 if (flag) return;
    50             }
    51         }
    52     } else {
    53         for (i = now + 1;i < n; ++ i) {
    54             if (a[i] >= a[now] && check(now+1,i)) {
    55                 ans[num] = a[i];
    56                 dfs(i,num + 1);
    57                 if (flag) return;
    58             }
    59         }
    60     }
    61 }
    62 
    63 int main()
    64 {
    65     int i, t;
    66     while (~scanf("%d%d",&n,&k)) {
    67         for (i = 0;i < n; ++ i)
    68             scan_d(a[i]);
    69         cnt = 0;
    70         for (tot = 1;cnt < k; ++ tot) {
    71             flag = 0;
    72             t = cnt;
    73             dfs(0,0);
    74             if (t == cnt || flag) break;              //达到要求个数或者输出完所有可能情况结束
    75         }
    76         puts("");
    77     }
    78     return 0;
    79 }        
    代码君
  • 相关阅读:
    CIFAR10-网络训练技术
    论文-Deep Residual Learning for Image Recognition
    Origin-作图相关
    OnCtlColor
    查看电脑MAC地址
    改变静态文本框和PictureControl的背景颜色
    MFC在对话框中的Picture contrl控件中添加icon图标,并改变icon图标的背景色与对话框背景色一致
    char型数组学习
    条件编译
    ASCII码
  • 原文地址:https://www.cnblogs.com/usedrosee/p/4192686.html
Copyright © 2011-2022 走看看