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算法介绍 .总得来说是从某个状态开始,不断的转移状态知道无法转移,然后回到前一步的状态.如此不断的重复一直到找到最终的解.根据这个特点,常常会用到递归. ...
随机推荐
- Struts2值栈详解
1. 关于值栈: 1). helloWorld 时, ${productName} 读取 productName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的. 2). ...
- [转]startActivityForResult的用法和demo
有时候我们需要把A activity提交数据给B activity处理,然后把结果返回给A 这种方式在很多种情况需要用到,比如我应用的程序需要有拍照上传的功能. 一种解决方案是 我的应用程序 〉调 ...
- HDU 1054 Strategic Game(树形DP)
Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- play1.x vs play2.x 对比(转)
个人看到对比play1.x和play2.x比较的文章中,写的最深入,最清晰的一个.转自:http://freewind.me/blog/20120728/965.html 为了方便群中的Play初学者 ...
- 2015十大顶级开源ERP系统点评
如今,企业资源规划(ERP)和客户关系管理(CRM)系统的必要性已经被各种组织和企业所认可:ERP和CRM能够直接为企业的业务效率和利润做出贡献. 但是随着今天企业商业形态的日趋多样化,互联网新经济的 ...
- 为什么有时候必须添加sys.setdefaultencoding('utf-8')
今天在尝试Python的CGI模块时遇到中文字符不能正确显示的问题,很郁闷.在网上仔细找了找,终于解决了这个问题,现在将解决方法陈述如下,以防下次失误. 页面源代码如下 #-*- coding: ut ...
- git第三篇---建立一个project
Git global setup: git config --global user.name "xx" git config --global user.email " ...
- springframwork历史版本下载地址
http://sourceforge.net/projects/springframework/files/springframework-2/
- Android media媒体库分析之:MediaProvider
在做Android媒体应用程序时(Audio.Image.Video)需要对Android的媒体提供者(MediaProvider)做详细的分析,下面记录一下我的收获: 一.获取MediaProvid ...
- MBR区、DBR区、FAT区、DIR区和DATA区的区别
来自:互联网 磁盘上的数据按照其不同的特点和作用大致可分为5部分:MBR区.DBR区.FAT区.DIR区和DATA区.我们来分别介绍一下: (1)MBR区(主引导扇区) MBR(Main Boot R ...