hdoj 1518 Square 【dfs】
2014-08-27 07:59
323 查看
题意:给出n个(不同长度的)棍子,问能不能将他们构成一个正方形。
策略:深搜。
hdoj 1455的简化版
代码:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058
策略:深搜。
hdoj 1455的简化版
代码:
#include <stdio.h> #include <string.h> #include <algorithm> #define M 25 using namespace std; int s[M], n, ans;//ans就是答案 bool vis[M]; int dfs(int cou, int cur, int pos){ //cou是已分配的木棍数,cur是当前的长度, pos是当前的序号 if(cou == n){ return 1; } int i; for(i = pos; i < n; i ++){ if(vis[i]) continue; if(cur+s[i] < ans){ vis[i] = 1; if(dfs(cou+1, cur+s[i], i+1)) return 1; vis[i] = 0; if(cur == 0) return 0; while(s[i] == s[i+1]&&i+1<n) ++i; } else if(cur+s[i] == ans){ vis[i] = 1; if(dfs(cou+1, 0, 0)) return 1; vis[i] = 0; return 0; } } return 0; } int main(){ int t, i; scanf("%d", &t); while(t --){ int sum = 0; scanf("%d", &n); for(i = 0; i < n; i ++){ scanf("%d", &s[i]); sum+=s[i]; } if(sum%4){ //如果能,肯定能整除4 printf("no\n"); continue; } ans = sum/4; memset(vis, 0, sizeof(vis)); int flag = dfs(0, 0, 0); printf("%s\n", flag?"yes":"no"); } return 0; }
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058
相关文章推荐
- hdoj 1518 Square 【dfs+剪枝】
- hdoj 1518 Square (DFS + 剪枝)
- POJ 2362 HDOJ 1518 Square DFS剪枝
- hdoj--1518--Square(dfs)
- HDOJ 1518 Square(DFS 深搜)
- hdoj--1518--Square(dfs)
- HDOJ 题目1518 Square(dfs)
- HDU 1518 Square——dfs 论一句话的重要性
- HDU 1518 Square(DFS)
- HDU1518 Square (DFS)
- HDOJ1455 (DFS+剪枝优化)和 HDOJ1518可做类比
- poj 2362 hdoj 1518 Square(搜索)
- HDU 1518 Square(DFS)
- 1518 square (DFS)
- HDU 1518题 Square (DFS)
- hdu 1518 Square(dfs)
- hdu 1518 Square(dfs)
- hdu 1518 Square(DFS)
- 【DFS】hdu 1518 Square
- POJ 2362 && HDU 1518 Square(dfs)