POJ1011- DFS+剪枝
来源:互联网 发布:ajax前端获取数据 编辑:程序博客网 时间:2024/05/29 15:10
给n个小木棒
求一个值X
使得 n个小木棒 可以恰好凑成 任意根 值为X的长棒
求最小的X
dfs+两处重要剪枝 见注释
#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <iostream>#include <queue>#include <map>#include <set>#include <vector>using namespace std; bool vis[65];int tm[65];int x;int flag;int n; void dfs(int deep,int len,int num)//deep用过木棒数,len当前选取到的长度,num当前小棒序号{int i;if (flag) return ;if (len==0){ i=1;while(vis[i]) i++;//找到未用的最长的棒子vis[i]=true;dfs(deep+1,len+tm[i],i+1); //选取下一根vis[i]=false; //如果本递归退出了,说明当前选择拼凑X的方案不合法; return ; }if (len==x){if (deep==n) //全部选完了,且都能合成长度为x的方案flag=1;//成功结束标记elsedfs(deep,0,0);//继续下一根拼凑return;}for (i=num;i<=n;i++)//从比当前小的木棒开始选{if (!vis[i]&&len+tm[i]<=x)// 没选过且 长度拼在一起不超过x{ if (!vis[i-1]&& tm[i]==tm[i-1]) continue;//上一跟一样的都不选,这跟必然不用勾选 //most important cutvis[i]=true;dfs(deep+1,len+tm[i],i+1);//继续选vis[i]=false;if (tm[i]+len==x) return ; //由于是从大到小选取,如果这个刚好能凑成X的方案最终都不合法,那么必然无解.如果存在其他方案合法,例如较短的另外几根,但当前方案不合法,这是矛盾的 if (flag) return ;}} if (flag) return ;}bool cmp(int a,int b){return a>b;}int main(){ while(cin>>n&&n){int sum=0;int i;for (i=1;i<=n;i++){scanf("%d",&tm[i]);sum+=tm[i];}sort(tm+1,tm+1+n,cmp);for (i=tm[1];i<=sum;i++){if (sum%i) continue;flag=0; memset(vis,0,sizeof(vis));x=i;dfs(0,0,1);if (flag) {printf("%d\n",i);break;}} } return 0;}
0 0
- 1poj1011(dfs剪枝)
- POJ1011-Sticks DFS+剪枝
- poj1011 Sticks(dfs+剪枝)
- POJ1011 Sticks DFS+剪枝
- dfs+剪枝 poj1011
- POJ1011- DFS+剪枝
- POJ1011 经典DFS+剪枝
- poj1011 dfs 剪枝
- poj1011 木棒 dfs+剪枝
- POJ1011 Sticks【DFS+剪枝】
- poj1011 && uva307 DFS + 剪枝
- poj1011 -- Sticks (DFS+剪枝)
- POJ1011 DFS+剪枝
- poj1011-Sticks dfs各种剪枝
- POJ1011 dfs剪枝 半原创
- hdoj1455 poj1011 nyoj293 Sticks【DFS+剪枝】
- poj1011——剪枝dfs搜索题
- poj1011 Sticks DFS深度优先搜索+剪枝
- JavaScript学习笔记三
- LeetCode 22 Generate Parentheses(生成括号)
- HDU 1561 树形DP
- 算数-平均数、中位数和众数平均数
- 转:OPTION SQL_SELECT_LIMIT=DEFAULT java连接mysql错误
- POJ1011- DFS+剪枝
- iOS常见问题总结(四)
- docker部署nodejs环境(boot2docker)
- [kuangbin带你飞]专题一 简单搜索N - Find a way(HDU 2612)
- 二叉树、平衡二叉树、完全二叉树、满二叉树
- 数据结构字符串块链实验
- tableView的刷新
- Android数据库使用(LitePal)
- 黑马程序员——C语言基础 03—基本运算符