上一页 1 ··· 25 26 27 28 29 30 31 32 33 ··· 66 下一页
摘要: 给定一系列树形关系用来描述整个公司的人员关系,现在问给定的这些关系是否存在矛盾的地方。比赛的时候写搓了,对于每一个点都去考虑的左右区间,其实这样做是不太好的,因为每次从员工推到boss,其实boss的工资是灵活变动的,也就是说只要boss工资的右区间减去所有孩子的左区间后还要至少留下单位1的工资来满足boss,所以只要计算一个区间关系即可,或者说,右区间是与孩子的右区间没有关系的。代码如下:#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#includ 阅读全文
posted @ 2012-09-10 22:01 沐阳 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 该题题意为给定一个序列,这个序列能够按照栈的规则进行进出,只不过每个位置的数具有一个数值,每次用出来的顺序减1乘以这个数值,求最后的综合最小。我们有这样的设想,对于一个序列 A B C ... Z,他们有相对应的数值 value[A], value[B] ... value[Z],现在对整个串进行分析,我们试图分析能否找到该问题的子问题,设f[i][j] 为 i 到 j 这个序列能够出来的最小值,那么对于第i号元素来说,我们有如下选择,先出去若干个元素再让a出去,对于某一个区间,我们又可以细分下去。为什么要选择 i 号元素来考虑,因为我们考虑 i 号元素时,选择其他的元素段来考虑都将是一个连续 阅读全文
posted @ 2012-09-10 20:43 沐阳 阅读(364) 评论(0) 推荐(0) 编辑
摘要: 这一题是给定一个N,求一个最小的数M满足M^2%10^k = N,也就是M的平方的后面与N相同位数的数字的值为N。对于这一题,我的思路就是BFS搜索,对于每一位,假设出一个数来使得其平方的结果逐步的逼近最终的结果。代码如下:#include <iostream>#include <cstdlib>#include <cstdio>#include <queue>#include <algorithm>using namespace std;// 假设N是一个5位数,那么最差情况时是由1个大于等于5位数的数的平方得到的// 否则的话,就 阅读全文
posted @ 2012-09-10 14:26 沐阳 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 哈夫曼树,一个很耳熟的数据结构课上的内容。是用来处理编码的,准确的说是能够去压缩编码,本身是一种无损的压缩凡是,就是对于给定的字符做一个统计,然后根据统计构建一个长短不一的映射表,再根据这个映射表来恢复出原来的内容。这题是有一个长度为固定值得篱笆L,现在要N块木板来维护好这个篱笆,只要用锯子锯N-1次,题目就是给定N个长度,问如何安排使得最终的花费最短。花费是这样算的,要去锯那一段,那么花费就是这一段的长度。所以就有当某一段没有被分离出来时,那么它将连续作用于切割这一段的效果。因此我们希望起到这个连续作用的值越小越好,因此就可以用哈夫曼树来优化了。使用优先队列来写是非常方便的。代码如下:#in 阅读全文
posted @ 2012-09-06 17:09 沐阳 阅读(445) 评论(0) 推荐(0) 编辑
摘要: 这是一道面试题,可以说是数据结构中的基础题了,由先序遍历以及中序遍历生成一棵树,然后输出后序遍历。一个递归函数传递5个参数,顶点编号,先序左右区间,中序左右区间,每次进行区间长度判定,当只有一个元素就进行元素判定,递归构树。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#define MAXN 1005using namespace std;int N, p[MAXN], m[MAXN], 阅读全文
posted @ 2012-08-24 08:31 沐阳 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 这题就是求一个矩阵中的最小面积矩阵,使得其和大于一个给定的K,由于是求最优解,所以很自然的想到了二分查找这个值,但是这题我却在不去顶是否满足二分性质的前提下匆忙的选择了二分查找,最终导致了错误。原因在与当一个面积为一个最优解的时候,面积大于该最优解的子矩阵不一定包含这个最优矩阵,例如一个5*5的矩阵的,如果最优矩阵是一个2*2的矩阵,那么1*5的面积为5的矩阵式不会包含这个2*2的矩阵的,所以......代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorit 阅读全文
posted @ 2012-08-23 18:41 沐阳 阅读(7211) 评论(0) 推荐(0) 编辑
摘要: 求一条从一点出发来回的最长路。将问题转化为从某点出发的到达N点的两条不相交的路径。定义dp[i][j]表示第一个点到达i点,第二个点到达j点所经过的最多顶点数,初始状态为dp[1][1] = 1表示从1,1点出发经过的顶点数为1.动态方程:dp[i][j] = max( dp[i][k] + 1 ) 前提是 k,j 之间有边; 整个状态不去更新dp[i][i],因为如果更新了这个状态就可能使得最优解中包含了相同的点。代码如下:#include <cstring>#include <cstdio>#include <cstdlib>#include <m 阅读全文
posted @ 2012-08-22 10:57 沐阳 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 听说有了打表算法算法之后,就觉得按位DP太他妈蛋疼了。直接把整个数据规模划分成10000为段的数据进行离线打表。然后再对多余的部分进行暴力就可以了。打表代码:#include <cstdlib>#include <cstring>#include <cstdio>using namespace std;int fun(int x){ if (x == 0) return 0; else return fun(x/10) + x % 10; }bool Ac(int x){ int t = fun(x); if (x % t == 0) return true 阅读全文
posted @ 2012-08-21 21:51 沐阳 阅读(2099) 评论(5) 推荐(1) 编辑
摘要: 题意为给定了N棵树,M个蘑菇,一阵风刮来,求期望的幸存的蘑菇的权值。我们可以转化为求每一个蘑菇仔这一阵风过后的期望权值,然后再把所有的蘑菇的权值相加即可。所以我们对于每一棵树进行一次更新,在其安全区域进行更新,这个用线段树来解决,然后再询问一次蘑菇所在地方的安全系数就可以了。代码如下:#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#i 阅读全文
posted @ 2012-08-20 19:16 沐阳 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 简单的无向图求割点.代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#define MAXN 1005using namespace std;int head[MAXN], idx, LIM, dfn[MAXN], low[MAXN], ti;int subnet[MAXN];bool vis[MAXN];struct Edge{ int v, next; }e[MAXN*MAXN];void AddEdge(int x, int v){ 阅读全文
posted @ 2012-08-20 11:18 沐阳 阅读(228) 评论(0) 推荐(0) 编辑
上一页 1 ··· 25 26 27 28 29 30 31 32 33 ··· 66 下一页