hdoj 1518(DFS)

#include <iostream>

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int n, a[25], visit[25], side, flag = 0;
bool cmp(int a, int b)
{
return a > b;
}
void dfs(int gs, int len, int k)
{
if (gs >= 3)
{
flag = 1;
return;
}
for (int i = k; i < n; i++)
{
if (flag)
return;
if (visit[i])
continue;
if (len + a[i] == side)
{
visit[i] = 1;
dfs(gs + 1, 0, 0);
visit[i] = 0;
if (flag)
return;
}
else if (len + a[i] < side)
{
visit[i] = 1;
dfs(gs, len + a[i], i + 1);
visit[i] = 0;
if (flag)
return;
}
}

}
int main(int argc, char *argv[])
{
int t, sum;
cin >> t;
while (t--)
{
cin >> n; sum = 0;
for (int i = 0; i<n; i++)
{
cin >> a[i];
sum += a[i];
}
side = sum / 4;
sort(a, a + n, cmp);
if (sum % 4 != 0 || a[0]>side)
{
cout << "no" << endl;
continue;
}
memset(visit, 0, sizeof(visit)); flag = 0;
dfs(0, 0, 0);
if (flag)
cout << "yes" << endl;
else
cout << "no" << endl;
}
return 0;
}

原文地址:https://www.cnblogs.com/huluxin/p/9284134.html

时间: 2024-10-12 06:53:56

hdoj 1518(DFS)的相关文章

HJDU 1518—— Square(DFS)

简单深搜~~~~ <strong>#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<functional> #define M 30 using namespace std; int vis[M],a[M],n,flag,sum; void dfs(int s,int cur,int d) { if(cur==3||fl

POJ 3087 Shuffle&#39;m Up (DFS)

题目链接:Shuffle'm Up 题意:有a和b两个长度为n的字符序列,现定义操作: 将a.b的字符交叉合并到一个序列c,再将c最上面的n个归为a,最下面n个归为b 给出a,b和目标序列c,问最少多少次操作a.b转化为c 解析:将a.b放入哈希表,然后模拟操作过程直接dfs即可. AC代码: #include <cstdio> #include <iostream> #include <cstring> #include <map> using names

LeetCode Subsets (DFS)

题意: 给一个集合,有n个互不相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: DFS方法:由于集合中的元素是不可能出现相同的,所以不用解决相同的元素而导致重复统计. 1 class Solution { 2 public: 3 vector<vector<int>> subsets(vector<int>& nums) { 4 sort(nums.begin(),nums.end()); 5 DFS(0,nums,tmp); 6 return a

POJ 1699 Best Sequence(DFS)

題目鏈接 題意 : 將幾個片段如圖所示方法縮成一個序列,求出最短這個序列. 思路 : 其實我也不知道怎麼做.....看網上都用了DP.....但是我不會.....這個DP不錯,還有用KMP+状压DP做的 1 //1699 2 #include <iostream> 3 #include <stdio.h> 4 #include <string.h> 5 #include <string> 6 7 using namespace std; 8 9 string

LeetCode Subsets II (DFS)

题意: 给一个集合,有n个可能相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: 看这个就差不多了.LEETCODE SUBSETS (DFS) 1 class Solution { 2 public: 3 vector<vector<int>> subsets(vector<int>& nums) { 4 sort(nums.begin(),nums.end()); 5 DFS(0,nums,tmp); 6 ans.push_back(vector

poj A Knight&#39;s Journey(DFS)

题目链接:http://acm.hrbust.edu.cn/vj/index.php?c=problem-problem&id=190592 题意:给出p*q的棋盘,从(A,1)开始,走“日”字,问能否走完棋盘上所有的点,如果能,按字典序输出路径: 思路:DFS,并保存路径即可,注意处理走的方向顺序int dir[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}}; #include <stdio.h> #in

11218 - KTV(dfs)

问题 C: Repeat Number 时间限制: 1 Sec  内存限制: 128 MB 提交: 23  解决: 7 [提交][状态][论坛] 题目描述 Definition: a+b = c, if all the digits of c are same ( c is more than ten),then we call a and b are Repeat Number. My question is How many Repeat Numbers in [x,y]. 输入 There

POJ 2488-A Knight&#39;s Journey(DFS)

A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31702   Accepted: 10813 Description Background The knight is getting bored of seeing the same black and white squares again and again and has decided to make a journey ar

poj3187Backward Digit Sums(DFS)

题目链接: huangjing 思路: 这个题目想到dfs很容易,但是纠结在这么像杨辉三角一样计算那些值,这个我看的队友的,简直厉害,用递归计算出杨辉三角顶端的值....具体实现详见代码... 题目: Language: Default Backward Digit Sums Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4285   Accepted: 2474 Description FJ and his cows