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

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

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


 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=;
int a[maxn];
int n;
int flag;
vector <int> p;
int t;
int c[maxn];
int j;
void dfs(int k,int *vis,int cur)
{
long long cnt=;
if(cur==n)
{
int flag1=;
for(int i=;i<cur;i++)
if(vis[i])
{
cnt+=a[i];
if(cnt==k)
{
flag=;
flag1=;
t=i;
break;
}
}
if(flag1)
{
j=;
for(int i=;i<=t;i++)
{
if(vis[i])
c[j++]=i;
}
// p.clear();
}
return;
}
vis[cur]=;
dfs(k,vis,cur+);
vis[cur]=;
dfs(k,vis,cur+);
}
int main()
{
int k;
int vis[maxn];
while(scanf("%d",&n)!=EOF)
{
scanf("%d",&k);
for(int i=;i<n;i++)
scanf("%d",&a[i]);
flag=;
dfs(k,vis,);
if(flag)
{
printf("YES\n");
for(int i=;i<j-;i++)
printf("%d ",a[c[i]]);
printf("%d\n",a[c[j-]]);
}
else
printf("NO\n");
}
return ;
}

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

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
using namespace std;
const int maxn=;
int a[maxn],vis[maxn];
int n,k;
bool dfs(int sum,int i)
{
if(i==n) return sum==k;
if(dfs(sum,i+))
{
vis[i]=;
return true;
}
if(dfs(sum+a[i],i+))
{
vis[i]=;
return true;
}
return false;
}
int main()
{
while(cin>>n>>k)
{
for(int i=;i<n;i++)
scanf("%d",&a[i]);
memset(vis,,sizeof(vis));
if(dfs(,))
{
printf("YES\n");
int k;
for(int i=;i<;i++)
if(vis[i])
{
k=i;
printf("%d",a[i]);
break;
}
for(int i=k+;i<;i++)
if(vis[i])
printf(" %d",a[i]);
}
else
{
printf("NO");
}
printf("\n");
}
return ;
}

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

NYoj1058的更多相关文章

  1. NYOJ-1058 DFS部分求和

    原题链接 本题思路:暴力深搜,具体见代码. #include <iostream> #include <stack> using namespace std; + ; int ...

  2. 【经典DFS】NYOJ-1058-部分和问题

    [题目链接:NYOJ-1058] 看到题目难度是2,所以想也没想,直接循环比较...结果果然... 是错的. #include<cstdio> #include<cstring> ...

  3. 深度优先搜索(DFS)——部分和问题

    对于深度优先搜索,这里有篇写的不错的博客:DFS算法介绍 .总得来说是从某个状态开始,不断的转移状态知道无法转移,然后回到前一步的状态.如此不断的重复一直到找到最终的解.根据这个特点,常常会用到递归. ...

随机推荐

  1. Timewarp 一种生成当中帧技术,异步时间扭曲(Asynchronous Timewarp)

    翻译: https://www.oculus.com/blog/asynchronous-timewarp/    异步时间扭曲(Asynchronous Timewarp 时间扭曲,即调整时长) 关 ...

  2. Debian 安装Nvidia显卡驱动

    1.到nvidia官方网站下载自己显卡对应型号得驱动,如果不知道显卡型号,可以使用如下命令来查看 lspci | grep VGA 2.安装显卡驱动所必需得工具 apt-get install bui ...

  3. linux内核移植到S5pv210

    make s5pv210_defconfig 1.System Type  ---> (0) S3C UART to use for low-level messages 2.Kernel ha ...

  4. hadoop yarn 易理解

    Hadoop 和 MRv1 简单介绍 Hadoop 集群可从单一节点(其中所有 Hadoop 实体都在同一个节点上运行)扩展到数千个节点(其中的功能分散在各个节点之间,以增加并行处理活动).图 1 演 ...

  5. mybatis generator Date类型时间丢失

    开篇 本次项目换用了Oracle数据库,讲真,真的不好用,不太喜欢,比较喜欢轻量级的MySQL但是不得不说从Oracle的严谨中学到不少好东西. <resultMap id="Base ...

  6. 区间DP 入门

    首先我们先需要知道区间是如何用dp来做的,让我们来看一下模板. ; i <= n; i++){//枚举区间里面的个数 ; j <= 能枚举到得最大的pos; j++){ ;//表示在目前能 ...

  7. div使用

    div style常用属性 一.常用属性: 1.Height:设置DIV的高度. 2.Width:设置DIV的宽度. 例: <div style="width:200px;height ...

  8. Matplotlib中文显示的问题

    原文地址:http://blog.csdn.net/rumswell/article/details/6544377 #Matplotlib中文显示有问题,当然可以修改配置文件matplotlibrc ...

  9. zencart侧边导航点击一级目录展开二级目录

    [小 大] 2013-09-17 00:20 来源: 未知 作者:wtozz_admin 我要投稿 zencart侧边导航点击一级目录展开二级目录 zen cart Categories默认的是只显示 ...

  10. .NET程序默认启动线程数

    问:一个.NET程序在运行时到底启动了多少个线程? 答:至少3个. 启动CLR并运行Main方法的主线程 调试器帮助线程 Finalizer线程 class Program { static void ...