zoukankan      html  css  js  c++  java
  • NYoj1058

    水题,dfs,裸的,本来这道题没什么好写的,只是第一次写的代码慢的出奇,纪念一下那个奇怪的思路

    链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1058

    慢得出奇的代码,必须TLE:

     1  
     2  
     3 #include<iostream>
     4 #include<cstdio>
     5 #include<cstring>
     6 #include<string>
     7 #include<cmath>
     8 #include<algorithm>
     9 #include<vector>
    10 using namespace std;
    11 const int maxn=22;
    12 int a[maxn];
    13 int n;
    14 int flag;
    15 vector <int> p;
    16 int t;
    17 int c[maxn];
    18 int j;
    19 void dfs(int k,int *vis,int cur)
    20 {
    21     long long cnt=0;
    22     if(cur==n)
    23     {
    24         int flag1=0;
    25         for(int i=0;i<cur;i++)
    26             if(vis[i])
    27         {
    28             cnt+=a[i];
    29             if(cnt==k)
    30             {
    31                 flag=1;
    32                 flag1=1;
    33                 t=i;
    34                 break;
    35             }
    36         }
    37         if(flag1)
    38         {
    39              j=0;
    40             for(int i=0;i<=t;i++)
    41             {
    42                 if(vis[i])
    43                 c[j++]=i;
    44             }
    45            // p.clear();
    46         }
    47             return;
    48     }
    49     vis[cur]=1;
    50     dfs(k,vis,cur+1);
    51     vis[cur]=0;
    52     dfs(k,vis,cur+1);
    53 }
    54 int main()
    55 {
    56     int k;
    57     int vis[maxn];
    58     while(scanf("%d",&n)!=EOF)
    59     {
    60         scanf("%d",&k);
    61         for(int i=0;i<n;i++)
    62             scanf("%d",&a[i]);
    63         flag=0;
    64         dfs(k,vis,0);
    65         if(flag)
    66         {
    67             printf("YES
    ");
    68             for(int i=0;i<j-1;i++)
    69                 printf("%d ",a[c[i]]);
    70             printf("%d
    ",a[c[j-1]]);
    71         }
    72         else
    73             printf("NO
    ");
    74     }
    75     return 0;
    76 }
    77                 
    View Code

    之后改良思路以后AC掉了,AC代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<string>
     5 #include<cmath>
     6 #include<vector>
     7 using namespace std;
     8 const int maxn=22;
     9 int a[maxn],vis[maxn];
    10 int n,k;
    11 bool dfs(int sum,int i)
    12 {
    13     if(i==n) return sum==k;
    14     if(dfs(sum,i+1))
    15     {
    16         vis[i]=0;
    17         return true;
    18     }
    19     if(dfs(sum+a[i],i+1))
    20     {
    21         vis[i]=1;
    22         return true;
    23     }
    24     return false;
    25 }
    26 int main()
    27 {
    28     while(cin>>n>>k)
    29     {
    30         for(int i=0;i<n;i++)
    31             scanf("%d",&a[i]);
    32         memset(vis,0,sizeof(vis));
    33         if(dfs(0,0))
    34         {
    35             printf("YES
    ");
    36             int k;
    37             for(int i=0;i<22;i++)
    38                 if(vis[i])
    39             {
    40                 k=i;
    41                 printf("%d",a[i]);
    42                 break;
    43             }
    44             for(int i=k+1;i<22;i++)
    45                 if(vis[i])
    46                 printf(" %d",a[i]);
    47         }
    48         else
    49         {
    50             printf("NO");
    51         }
    52         printf("
    ");
    53     }
    54     return 0;
    55 }
    View Code

    考研前最后一篇博客,博客园停止更新到12月28日,

  • 相关阅读:
    Spring配置文件中别名的使用
    Spring IOC容器创建对象的方式
    sass安装及使用
    word转html 压缩图片网站
    Yarn 和 Npm 命令行切换 摘录
    react生命周期
    event事件
    Flex 布局
    YYYY-mm-dd HH:MM:SS 时间格式
    页面按钮埋点+跟踪location.search
  • 原文地址:https://www.cnblogs.com/wolf940509/p/4896566.html
Copyright © 2011-2022 走看看