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算法介绍 .总得来说是从某个状态开始,不断的转移状态知道无法转移,然后回到前一步的状态.如此不断的重复一直到找到最终的解.根据这个特点,常常会用到递归. ...
随机推荐
- idea编译报错:未结束的字符串文字;非法的表达式;未结束的字符串字面值
在idea的Settings中,找到File Encodings,将IDE Encoding 改为UTF-8 要多试几次,清除缓存什么的,具体原因不知道,不过经常第一次修改不能成功.
- java跳过构造方法新建对象
Java有四种创建对象的方法: (1) 用new语句创建对象,这是最常见的创建对象的方法. (2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constr ...
- jsp ${param.id}用法
它的取值范围Page,Request,Session,Application. ${param.id} 与输入有关,相对于 request.getParameter("id").意 ...
- linux内核移植到S5pv210
make s5pv210_defconfig 1.System Type ---> (0) S3C UART to use for low-level messages 2.Kernel ha ...
- android打成apk
用的软件是这个 D:\软件备份\adt-bundle-windows-x86_64-20140321\adt-bundle-windows-x86_64-20140321\eclipse file-- ...
- python smtplib.SMTPDataError: (554
- POJ 1523 SPF (去掉割点能形成联通块的个数)
思路:使用tarjan算法求出割点,在枚举去掉每一个割点所能形成的联通块的个数. 注意:后来我看了下别的代码,发现我的枚举割点的方式是比较蠢的方式,我们完全可以在tarjan过程中把答案求出来,引入一 ...
- java 设计模式之单利模式以及代理模式(静态)
1:单利模式: public class Singleton { private static Singleton uniqueInstance = null; private Singleton() ...
- HDU 5240 Exam
The 2015 ACM-ICPC China Shanghai Metropolitan Programming Contest 2015ACM-ICPC上海大都会赛 签到题 #include< ...
- we7调用模板如何区分栏目页与详细页
<a href='/xsdt/0000-00-00-00.html?id=<%# Eval("ID")%>'> 0000-00-00-00.html传参数来 ...