NYoj1058
水题,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的更多相关文章
- NYOJ-1058 DFS部分求和
原题链接 本题思路:暴力深搜,具体见代码. #include <iostream> #include <stack> using namespace std; + ; int ...
- 【经典DFS】NYOJ-1058-部分和问题
[题目链接:NYOJ-1058] 看到题目难度是2,所以想也没想,直接循环比较...结果果然... 是错的. #include<cstdio> #include<cstring> ...
- 深度优先搜索(DFS)——部分和问题
对于深度优先搜索,这里有篇写的不错的博客:DFS算法介绍 .总得来说是从某个状态开始,不断的转移状态知道无法转移,然后回到前一步的状态.如此不断的重复一直到找到最终的解.根据这个特点,常常会用到递归. ...
随机推荐
- selenium2.0集成测试案例
webDriver模拟点击对web工程测试还是挺方便的. package suite; import java.util.concurrent.TimeUnit; import org.junit.A ...
- 一个不错的PHP文件页面缓存类
在php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考. 页面缓存类 <?php /* * 缓存类 cac ...
- oracle10g遇到ORA-00257归档程序错误,在释放之前仅限于内部连接
一.简要介绍 首先数据库日志文件有两种: 联机日志文件和归档日志文件,联机日志文件会将之前的覆盖,不会做备份. 而归档日志文件会做备份,这样就造成了归档日志空间已满,解决方法: 如果真的是归档日志空间 ...
- UMeng崩溃日志如何进行symbiolicate
Application received signal SIGSEGV (null) ( 0 CoreFoundation 0x2f2dde9b + 154 1 libobjc.A.dylib 0x3 ...
- Jenkins email-ext邮件通知模板
http://blog.csdn.net/houyefeng/article/details/51344337 示例 以html格式发送送如下内容:邮件内容为项目名称.构建次数.触发原因.构建日志前1 ...
- margin叠加相邻两个元素的上下margin是叠加在一起
<!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...
- 简单时钟——css3
这里我们使用css3的特性制作一个简易的时钟,代码如下: <!DOCTYPE html><html> <head> <meta charset="U ...
- UVALive 4031 Integer Transmission(贪心 + DP)
分析:求出最大值和最小值比较简单,使用贪心法,求最小值的时候我们让所有的0尽可能的向后延迟就可以了,求最大值则相反. 关键在于求出可以组合出的数字个数. 这就是组合数学版的dp了,我们让dp[i][j ...
- mysql HA-keepalived
关于MySQL-HA,目前有多种解决方案,比如heartbeat.drbd.mmm.共享存储,但是它们各有优缺点.heartbeat.drbd配置较为复杂,需要自己写脚本才能实现MySQL自动切换,对 ...
- Sublime Text 3 安装使用
机器比较老,运行Pycharm等卡死,所以选择Sublime,非常流畅. 安装 版本3103 官网下载安装 注册码: —– BEGIN LICENSE —–Nicolas HennionSingle ...