摘要: 我搜索了一下,找到了一篇很好的博客,讲的挺详细:链接。解析多重背包的最原始的状态转移方程:令 c[i] = min(num[i], j / v[i])f[i][j] = max(f[i-1][j-k*v[i]] + k*w[i]) (1 <= k <= c[i]) 这里的 k 是指取第 i 种物... 阅读全文
posted @ 2014-12-15 21:44 JoeFan 阅读(6898) 评论(0) 推荐(1) 编辑
摘要: 题目链接:POJ - 1742题目大意现有 n 种不同的硬币,每种的面值为 Vi ,数量为 Ni ,问使用这些硬币共能凑出 [1,m] 范围内的多少种面值。题目分析使用一种 O(nm) 的 DP (据说这是类多重背包?),枚举每一种硬币,对于每一种硬币 i 枚举每一个面值 j ,如果这个面值 j 使... 阅读全文
posted @ 2014-12-15 20:06 JoeFan 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 题目链接: BZOJ - 2004题目分析看到题目完全不会。。于是立即看神犇们的题解。由于 p#include #include #include #include #include using namespace std;const int MaxMap = 130 + 5, Mod = 3003... 阅读全文
posted @ 2014-12-13 08:31 JoeFan 阅读(651) 评论(1) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2014-12-12 19:55 JoeFan 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 题目链接:BZOJ - 1875题目分析: 这道题如果去掉“不会立刻沿着刚刚走来的路走回”的限制,直接用邻接矩阵跑矩阵乘法就可以了。然而现在加了这个限制,建图的方式就要做一些改变。如果我们把每一条边看做点建矩阵,那么每次从一条边出发都只会到其他的边,不能仍然在这条边上“停留”,所以这就可以满足题目... 阅读全文
posted @ 2014-12-11 21:38 JoeFan 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 题目链接:BZOJ - 2165题目分析: 这道题我读了题之后就想不出来怎么做,题解也找不到,于是就请教了黄学长,黄学长立刻秒掉了这道题,然后我再看他的题解才写出来。。Orz 使用 DP + 倍增 ,用状态 f[x][i][j] 表示从 i 出发,坐 x 次电梯到达 j ,最多能上升的层数。开始... 阅读全文
posted @ 2014-12-10 20:43 JoeFan 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 题目链接:BZOJ - 3172题目分析: 题目要求求出每个单词出现的次数,如果把每个单词都在AC自动机里直接跑一遍,复杂度会很高。 这里使用AC自动机的“副产品”——Fail树,Fail树的一个性质是,一个字符串出现的次数,就等于以它的结点为根的Fail树中的子树中所有结点的 Cnt 和。 ... 阅读全文
posted @ 2014-12-10 20:29 JoeFan 阅读(250) 评论(0) 推荐(0) 编辑
摘要: Problem Link : BZOJ 3747题解:ZYF-ZYF 神犇的题解 解题的大致思路是,当区间的右端点向右移动一格时,只有两个区间的左端点对应的答案发生了变化。 从 f[i] + 1 到 i 的区间中的答案增加了 W[A[i]], 从 f[f[i]] + 1 到 f[i] 的区间的答... 阅读全文
posted @ 2014-12-05 19:41 JoeFan 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 题目链接 : BZOJ 1085题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧。 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS 验证在当前枚举的步数之内能否到达目标状态。 如果不能到达,就枚举下一个步数,重新搜索,即使某些... 阅读全文
posted @ 2014-12-05 18:23 JoeFan 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 题目链接:BZOJ 1072这道题使用 C++ STL 的 next_permutation() 函数直接暴力就可以AC 。(使用 Set 判断是否重复)代码如下:#include #include #include #include #include #include #include using... 阅读全文
posted @ 2014-11-26 13:49 JoeFan 阅读(928) 评论(0) 推荐(0) 编辑