The Triangle http://poj.org/problem?id=1163暴力dfs的话,每个节点有两条路可以走,那么n个节点复杂度就是2^n n=100 超时 dp来做 就优化成 n^2记忆化搜索,就能优化成n^2 因为一个点最多算一次,以后会直接返回dp i j 。 dp i j ....
分类:
其他好文 时间:
2014-09-14 11:19:27
阅读次数:
185
// 算法:DFS// 递归函数参数使用引用//Time Limit Exceeded 1 class Solution { 2 public: 3 vector > findLadders( string start, string end, unordered_set &dict) { ...
分类:
其他好文 时间:
2014-09-14 11:18:47
阅读次数:
154
http://acm.hdu.edu.cn/showproblem.php?pid=1016
经典 dfs问题:没有剪枝 218ms
#include
#include
int n,vis[21],a[21];
bool is_prime(int x)
{
if(x==2||x==3) return 1;
if(x==1) return 0;
for(int i=2;...
分类:
其他好文 时间:
2014-09-14 09:00:16
阅读次数:
258
poj1816:http://poj.org/problem?id=1816题意:给你n个模板串,然后每个串除了字母,还有?或者*,?可以代替任何非空单个字符,*可以替代任何长度任何串,包括空字符串。现在给以一些串,问你这些串在哪些串中出现过。题解:trie+DFS。首先,把n个字符串放到trie中...
分类:
其他好文 时间:
2014-09-13 20:03:45
阅读次数:
219
http://acm.hdu.edu.cn/showproblem.php?pid=1010
题意:在n*m的地图上,标记为S的为狗狗的起点,D为门,问能否恰好以给定t的时间到达D,能就输出YES,否则NO,每个点只能走一次。
思路:dfs问题,找到一条长度恰好为t的路径,不一定是最短路路径,所以不能单纯用bfs。
但是 一般dfs会超时,所以要剪枝,这里主要用到奇偶性剪枝,参考链接:
...
分类:
其他好文 时间:
2014-09-13 09:26:35
阅读次数:
196
题意:给定gcd(a,b)和lcm(a,b) 求使得a+b最小的 a,b思路:结合算数基本定理中 gcd lcm的质因子表示形式把lcm(a,b)质因数分解 以后 通过dfs找到 a+b最小的a b即可#include #include#include#includeusing namespace ...
分类:
其他好文 时间:
2014-09-12 20:41:34
阅读次数:
225
题意:一棵根为1的多叉树有n个点,题目有m次询问。第一行输入n和m,第二行输入n-1条边, 以后m行输入操作,操作有两种:1 x val 表示 节点的值x+val,同时它的儿子层节点的值-val,孙子层节点的值+val...如此往下直到叶子节点;2 x 表示输出x节点的当前值。思路:类似poj332...
分类:
其他好文 时间:
2014-09-12 20:30:54
阅读次数:
202
题意:在某些点上安装首次访问时候会报警的机器,给出报警嗲你的顺序,问是否合法。
思路:按所给的序列,每个进来时判断这个点目前能否达到(第一个可达总是),若能,则该点进行扩展遍历所有没有报警器的点,遇到有的报警器的标记可达就返回。
预判:判断原图连图性。
#include
#include
#include
#include
#include
using namespace s...
分类:
其他好文 时间:
2014-09-12 10:17:53
阅读次数:
240
UVA 1494 - Qin Shi Huang's National Road System
题目链接
题意:秦始皇修路,要求所有道路连通,现在道士徐福可以用法术修一条路,问现在用法术修路的两边的人口数A,除以总修路长度B的最大值A/B是多少
思路:先求出最小生成树,然后利用dfs找出每两点之间的最大权的边的权值,然后在枚举哪两个城市需要法术修路,这样就可以记录下答案最大值
...
分类:
其他好文 时间:
2014-09-11 17:24:02
阅读次数:
220
题目来源:HDU 2894 DeBruijin
题意:
思路:
#include
#include
using namespace std;
int vis[5000], ans[5000];
int len, n;
void dfs(int u)
{
int v = ((u<<1)&((1<<n)-1));
if(!vis[v])
{
vis[v] = 1;
df...
分类:
其他好文 时间:
2014-09-11 17:16:12
阅读次数:
206