ZOJ 1909Square 题解
来源:互联网 发布:全球气候变暖数据 编辑:程序博客网 时间:2024/05/17 02:03
题目:给你一堆木条,然后让你通过头尾相接的方式让其组成一个正方形,问你是否有这样的可能性
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1909
先判断是否能整除4,能的话,再用dfs暴力搜索 搜索到一个边之后,再搜索另一个边,搜索完第3个边之后就可以已经组成正方形了
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <vector>#include <map>#include <stack>#include <queue>#include <list>#define LL long long#define INF 0x7fffffff#define FIN 0x80000000using namespace std;int n;int num[22],vis[22];//pos递归的位置 cnt是已经搜索到的正方形边的个数 len是正在搜索的边的当前长度 lay是正方形的目标长度bool dfs(int pos,int cnt,int len,int lay){ if(cnt==3) return true; if(len==lay) return dfs(0,cnt+1,0,lay); //搜索到一个边,接着从头再搜索下一个边 for(int i=pos; i<n; i++) { if(vis[i]) continue; if(len+num[i]>lay) continue; //剪枝 vis[i]=1; if(dfs(i+1,cnt,len+num[i],lay)) return true; vis[i]=0; } return false;}int main(){ int T; scanf("%d",&T); while(T--) { scanf("%d",&n); int sum=0; for(int i=0; i<n; i++) { scanf("%d",&num[i]); sum+=num[i]; } if(sum%4)// 不能整除4 则为no { printf("no\n"); continue; } sort(num,num+n); memset(vis,0,sizeof(vis)); if(dfs(0,0,0,sum/4)) printf("yes\n"); else printf("no\n"); }}
0 0
- ZOJ 1909Square 题解
- zoj 1909 Square
- 【ZOJ 1909】 square
- zoj 1909 || poj 2362 Square
- ZOJ 1909 Square(DFS+剪枝)
- ZOJ 1909 Square (DFS + 剪枝)
- poj 2362 || zoj 1909 Square (DFS+剪枝)
- zoj 1909 Square 不能编译求指导!!
- POJ2362《Square》题解
- POJ3251:Big Square 题解
- zoj 1666 Square Coins
- ZOJ 1031 Square Destroyer
- ZOJ 1666 Square Coins
- ZOJ 2835 Magic Square
- zoj 1666 Square Coins
- ZOJ题解
- LeetCode 221 Maximal Square 题解
- ZOJ 3174 Square Root Day
- ZwQuerySystemInformation中的结构体和例子
- libcurl 多线程使用注意事项(转载)
- java设计模式1--工厂方法模式(Factory Method)
- 工资计算
- java设计模式2--抽象工厂模式(Abstract Factory)
- ZOJ 1909Square 题解
- 线性筛法求素数
- java中的接口Iterator和Iterable的区别
- java设计模式3--单例模式(Singleton)
- son extends father and override father's variable
- java设计模式4--建造者模式(Builder)
- Errors occurred during the build.
- 蓝桥杯省赛总结
- 第二十七讲--Oracle IMU及Redo Private Strands技术