水题,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. Ztree当节点没有下级时不显示下拉图标

    select o.*,(select count(*) from sys_org t where t.orgsupid=o.orgid) isLeaf from sys_org o where 1=1

  2. Android中实现滑动翻页—使用ViewFlipper(dp和px之间进行转换)

    Android中实现滑动翻页—使用ViewFlipper(dp和px之间进行转换) Android中dp和px之间进行转换 在xml布局文件中,我们既可以设置px,也可以设置dp(或者dip).一般情 ...

  3. VideoView的视频的全屏播放

    import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.content.I ...

  4. hdu 4463 Outlets(最小生成树)

    Outlets Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submi ...

  5. eclipse没有(添加)"Dynamic Web Project"选项的方法【转载】

    第一种方法: 你安装的是专门开发java项目的,而Dynamic Web Project  属于J2EE技术,所以你要专门下载一个集成了J2EE插件的Eclipse,(eclipse-jee-heli ...

  6. ubuntu服务器移植步骤

    1.安装LAMP套件 1 tasksel 2.安装FTP工具 http://www.cnblogs.com/esin/p/3483646.html 3.安装PHPMyAdmin 1)安装 1 apt- ...

  7. jquery插件简单的声明方法

    (function($){     //  声明插件内容     $.fn.pluginName = function(options){         //  默认插件配置         var ...

  8. JSP文件上传--FileUpload组件

    如果使用上传操作,并且没有使用框架之类,最好使用Smartupload,因为FileUpdate太难使用. 下载组件: fileupload包:http://commons.apache.org/pr ...

  9. 【摘自网络】dll库和lib库有什么区别

    简单地讲:第一:.DLL是动态链接库,而.LIB是静态链接库dll是个编译好的程序,调用时可以直接调用其中的函数,不参加工程的编译. 而lib应该说是一个程序集, 只是把一些相应的函数总结在一起, 如 ...

  10. vr & obv

    买卖信号 1.当VR曲线的运行形态一底比一底低,而OBV曲线的运行形态一底比一底高,同时股价也突破中短期均线,则表明VR指标和OBV出现了底背离走势,这是VR指标发出的短线买入信号.如图(15–1)所 ...