摘要: 保存下当前点能走的最大步长,当下次从其他点走到该点,则能够立即判定步长. 因为起点不一定, 以及 走一次不一定能走完所有位置. 但是,每次从最高点走,总是好的.能够走的更多. 每次选择没有走过的记忆化搜索.就OK了. 注意,a[i][j]可以取0, 所以dp应该初始化小于0解题代码#include<stdio.h>#include<string.h>#include<stdlib.h>#include<vector>#include<iostream>#include<algorithm>using namespace s 阅读全文
posted @ 2013-01-07 20:18 yefeng1627 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 因为 N = 100, 最大子矩阵行与行之间相邻,我们可以 O(N*N)内枚举子矩阵由哪些行组成,然后把多行合并成一行后,当一维数组求连续子序列和。时间复杂度接近 O(N*N*N) = 10^6解题代码:#include<stdio.h>#include<stdlib.h>#include<string.h>const int inf = 0x3fffffff;int a[110][110], b[110];int dp[110], ans, n;int main(){ while( scanf("%d", &n) != EOF) 阅读全文
posted @ 2013-01-07 20:14 yefeng1627 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 题目大意 一颗含有N个顶点的树,节点间有权值, 节点分为黑点和白点.问题是 找一条黑点数量不超过K个的最大路径.解题思路: 因为路径只有 过根节点以及不过根节点, 所以我们可以通过找寻树重心分治下去. 问题就退化成了处理: 对于当前以 x 为根的树, 其最大路径 对于X的所有直接子节点, 定义函数 G( I, J ) 表示子节点 I为根的树不超过J个黑点的最大路径. 定义函数 dep( i ) 表示以 i为根的树,最多黑点数量. 则结果为 ans = MAX{ G(u,L1) + G(v,L2) } ( u != v, 且 L1+L2 <= K - (当前根节点... 阅读全文
posted @ 2013-01-07 17:09 yefeng1627 阅读(1191) 评论(2) 推荐(0) 编辑

Launch CodeCogs Equation Editor