【HDOJ】1518 Square
2014-06-05 16:12
148 查看
DFS+剪枝。与HDOJ 1455如出一辙。
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXN 25 int nums[MAXN], n, len, cnt; char visit[MAXN]; int comp(const void *a, const void *b) { return *(int *)b - *(int *)a; } int dfs(int cnt, int beg, int l) { int i, flg = 0; if (cnt == 3) return 1; if (l == 0) { for (i=0; i<n; ++i) { if ( !visit[i] ) { visit[i] = 1; flg = dfs(cnt+1, i+1, len-nums[i]); visit[i] = 0; break; } } return flg; } for (i=beg; i<n; ++i) { if ( !visit[i] ) { if (i && !visit[i-1] && nums[i] == nums[i-1]) continue; if (nums[i] <= l) { visit[i] = 1; flg = dfs(cnt, i+1, l-nums[i]); visit[i] = 0; if (flg) return 1; } } } return 0; } int main() { int case_n, sum; int i, j; scanf("%d", &case_n); while (case_n--) { scanf("%d", &n); sum = 0; for (i=0; i<n; ++i) { scanf("%d", &nums[i]); sum += nums[i]; } if ( sum&3 ) printf("no\n"); else { len = sum>>2; qsort(nums, n, sizeof(int), comp); memset(visit, 0, sizeof(visit)); j = 1; for (i=0; i<n; ++i) if (nums[i] > len) { j = 0; break; } if (!j) printf("no\n"); else if ( dfs(0, 0, len) ) printf("yes\n"); else printf("no\n"); } } return 0; }
相关文章推荐
- hdoj 1518 Square 【dfs+剪枝】
- 深搜,hdoj1518square
- HDOJ 1518 Square(DFS+剪枝)
- hdoj--1518--Square(dfs)
- hdoj--1518--Square(dfs)
- HDOJ 1518 Square(DFS 深搜)
- hdoj 1518 Square 【dfs】
- hdoj 1518 Square (DFS + 剪枝)
- poj 2362 hdoj 1518 Square(搜索)
- poj 2362 hdoj 1518 Square(搜索)
- HDOJ1518Square 深搜
- HDOJ1518Square 深搜
- HDOJ 题目1518 Square(dfs)
- POJ 2362 HDOJ 1518 Square DFS剪枝
- hdu 1518 Square
- HDU 1518 Square
- hdoj-5903 Square Distance
- hdu 1518 Square
- HDU 1518 Square
- HDU 1518 Square