hdu Square DFS
Square
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5604 Accepted Submission(s): 1776
4 1 1 1 1
5 10 20 30 40 50
8 1 7 2 6 4 4 3 5
/*
1优化
如果按照素数环的方法,是暴搜的。超。
当第一次满足if(p==sum)的时候,(1).不需要再继续搜索下去,(2).而且从头再开始搜。
要满足(1),(2)我们在DFS中设立两个相应的变量n,p;
if(sum=p+f[i]) dfs(0,0,cur+1);
else if(p+f[i]<sum) dfs(i,p+f[i],cur);
if(p==0) break;
这样话,能有效的处理满足 cur++的情况时,退出当前的搜索。
另外当数字相同的时候也处理,while(f[i]==f[i+1]) i++;
2优化
如果排序,从大到小进行选择数字,避免了随机,能提高速度。
3优化
if(sum%4!=0) no
else sum=sum/4;
cur只要满足 3 就可以了,不需要4。
*/
#include<stdio.h>
#include<iostream>
#include<cstdlib>
#include<algorithm>
using namespace std;
int f[];
int visit[];
int flag;
int sum;
int m;
bool cmp(int a,int b)
{
return a>b;
}
void dfs(int n,int p,int cur)
{
int i;
if(cur==)
{
flag=;
return;
}
if(flag==) return;
for(i=n+;i<=m;i++)
{
if(visit[i]== && flag==)
{
visit[i]=;
if(p+f[i]==sum)
dfs(,,cur+);
else if(p+f[i]<sum)
dfs(i,p+f[i],cur);
visit[i]=;
if(p==) break;
while(f[i]==f[i+]) i++;
}
}
}
int main()
{
int i,j,n;
while(scanf("%d",&n)>)
{
while(n--)
{
scanf("%d",&m);
sum=;
for(i=;i<=m;i++)
{
scanf("%d",&f[i]);
sum=sum+f[i];
}
if(sum%!=)
{
printf("no\n");
continue;
}
sort(f+,f++m,cmp);
for(j=;j<=m;j++)
visit[j]=;
flag=;sum=sum/;
dfs(,,);
if(flag==) printf("yes\n");
else printf("no\n");
}
}
return ;
}
hdu Square DFS的更多相关文章
- HDU 5143 DFS
分别给出1,2,3,4 a, b, c,d个 问能否组成数个长度不小于3的等差数列. 首先数量存在大于3的可以直接拿掉,那么可以先判是否都是0或大于3的 然后直接DFS就行了,但是还是要注意先判合 ...
- Snacks HDU 5692 dfs序列+线段树
Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...
- Oil Deposits HDU - 1241 (dfs)
Oil Deposits HDU - 1241 The GeoSurvComp geologic survey company is responsible for detecting undergr ...
- hdu 1312(DFS)
Red and Black Tme Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- HDU1518 Square(DFS,剪枝是关键呀)
Square Time Limit : 10000/5000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submi ...
- HDU 5877 dfs+ 线段树(或+树状树组)
1.HDU 5877 Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...
- hdu 4751(dfs染色)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751 思路:构建新图,对于那些两点连双向边的,忽略,然后其余的都连双向边,于是在新图中,连边的点是能不 ...
- HDU 1045 (DFS搜索)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1045 题目大意:在不是X的地方放O,所有O在没有隔板情况下不能对视(横行和数列),问最多可以放多少个 ...
- HDU 1241 (DFS搜索+染色)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1241 题目大意:求一张地图里的连通块.注意可以斜着连通. 解题思路: 八个方向dfs一遍,一边df ...
随机推荐
- docker和定时任务
查看linux信息 cat /etc/issue 以id运行容器docker start 1c3339d7f9a8通过id结束容器 docker kill 1c3339d7f9a8 Ubuntu 安装 ...
- [HTML] H5在webApp中的注意事项
常用的meta标签 <!--防止手机中网页放大和缩小--> <meta name="viewport" content="width=device-wi ...
- Java自学路线
万事开头难,学习Java亦是如此.而在学习的开始,选择正确的学习路线更是尤为重要.在本文中我将分享本人自学转行路上的学习路线,希望能给想自学,却不知道方向的同学带来帮助~ 1 .JavaSE 基础 这 ...
- Sublime Text 3快捷键汇总
转自:http://blog.sina.com.cn/s/blog_73c5cfbe0101ldj8.html Sublime Text 3非常实用,但是想要用好,一些快捷键不可或缺,所以转了这个快捷 ...
- 【NOIP2013】 华容道 bfs预处理+bfs
这一题我们考虑一个最裸的算法: 我们设$dp[i][j][k][l]$表示当前棋子在$(i,j)$且空格在$(k,l)$时的最小步数 然后显然随便转移一下就好了,时间复杂度为$O(q(nm)^2)$. ...
- uiautomatorviewer 双击闪退问题解决
最近在学习app自动测试,结果在打开uiautomatorviewer查看app界面元素时,就出现了闪退的问题,找了很多很多方法,最后终于可以解决了,详情请继续往下看 首次安装adt的步骤 将下载的压 ...
- jade直接写类似JavaScript语法的东西,不需要写script
我们知道,html做计算都是在JavaScript中完成的,那么不用JavaScript行不行呢,可以直接在jade中一样的编写 如: -var a = 3 -var b = 4 div a+b = ...
- linux 目录结构+常用命令+压缩命令+vim使用+及基础知识
linux目录架构 / 根目录 /bin 常用的命令 binary file 的目录 /boot 存放系统启动时必须读取的档案,包括核心 (kernel) 在内 /boot/grub/menu.lst ...
- (转)AWK函数
http://wiki.jikexueyuan.com/project/awk/built-in-functions.html-------内置函数 http://wiki.jikexueyuan.c ...
- (转)CentOS7使用ACL精确控制文件和目录的访问权限
原文:https://www.linuxidc.com/Linux/2018-01/150111.htm https://blog.csdn.net/maxiaoqiang1/article/deta ...