……斜率优化吗

摘要: 转自http://blog.sina.com.cn/s/blog_508dd1e60100tvk0.html看了这个我就懂了!(不过要用到实际上应该还是不行)【题目大意】有N个数,现要将它们分成连续的若干段,每段的代价为(∑Ci)^2+M,求最小的代价。【题目分析】容易得到这样的一个动态规划算法:令dp[i]表示前i个数分成若干段的最小代价,能得到一个经典的动态转移方程:dp[i]= Min (dp[j] + Cost(j+1,i))+M,0<=j<i。其中Cost(a,b)表示把a..b这些数分成一段的费用。这个算法的时间复杂度是O(N^2)。 这题N有500000,必须优化。我 阅读全文
posted @ 2011-11-10 16:44 ushiojamie 阅读(614) 评论(0) 推荐(0) 编辑

公司聚会(有一个重点地方)

摘要: 题目描述dd_engi所在的TIANYI公司要举办一次盛大的公司聚会。可惜的是,由于场地和花费的原因,不可能所有人都参加。现在的任务是拟定参加聚会人员的名单。TIANYI公司的组织架构可以看做一棵有根多叉树。也就是说,在编号为1~N的所有N名员工中,除了最高管理者(编号为1)以外,每个员工都有且仅有一位直接上司;最高管理者则是这棵多叉树的“根”。这很好理解,对吗?另外,我们保证,员工的编号会大于他的直接上司的编号。不同的员工对于聚会有着不同的要求,事实上,若邀请第i位员工(编号为i),在聚会中满足他的要求需要花费Ci元。另一方面,不同的员工在聚会中的“兴奋指数”也不同,第i位员工参加聚会的兴奋 阅读全文
posted @ 2011-11-08 22:06 ushiojamie 阅读(198) 评论(0) 推荐(0) 编辑

有依赖的背包

摘要: 有依赖的背包来自"NOCOW"跳转到: 导航, 搜索有依赖的背包问题简化的问题这种背包问题的物品间存在某种“依赖”的关系。也就是说,i依赖于j,表示若选物品i,则必须选物品j。为了简化起见,我们先设没有某个物品既依赖于别的物品,又被别的物品所依赖;另外,没有某件物品同时依赖多件物品。算法这个问题由NOIP2006金明的预算方案一题扩展而来。遵从该题的提法,将不依赖于别的物品的物品称为“主件”,依赖于某主件的物品称为“附件”。由这个问题的简化条件可知所有的物品由若干主件和依赖于每个主件的一个附件集合组成。按照背包问题的一般思路,仅考虑一个主件和它的附件集合。可是,可用的策略非 阅读全文
posted @ 2011-11-07 20:48 ushiojamie 阅读(332) 评论(2) 推荐(0) 编辑

数石子【并查集】

摘要: 样例输入10 5 51 5 42 5 43 6 51 9 96 6 21 92 61 23 51 7样例输出9613UNKNOWN看到这种题一开始以为是线段树后来发现不能存区间然后我就不知道其他方法了……终于被告知是并查集(从来没有做过这种题!)引用 由于是区间合并,但是你无法确定他们之间的关系,所以应该想到并查集将他们联系起来(巧妙啊!又学到了新知识!)fa1=fa2的时候是这样的比如a_________________c (权值10)b__________c (6) a______b (4) 我把前两个连接起来后 有 dist[a]:=-10;dist[b]:=-6;fa[a]:=c;fa 阅读全文
posted @ 2011-11-04 20:02 ushiojamie 阅读(207) 评论(0) 推荐(0) 编辑

吃西瓜(压缩压缩!)

摘要: 样例输入234412805-4843019214910173128样例输出45我……看了题解……然后我终于懂了怎么做了!这么说来 糖果盒也可以这样做嘛╮(╯▽╰)╭我的糖果盒用的是貌似悬线法……这个我再去看一下……于是这种方法要学习 下周再多看一下 重点是压缩再枚举了取几行多高后一列一列地求最大子区间和!program p93;var f,a:array[0..51,0..51,0..33] of longint; h,n,m,ans:longint;procedure init;var i,j,k:longint;begin assign(input,'p93.in');re 阅读全文
posted @ 2011-11-04 16:52 ushiojamie 阅读(168) 评论(0) 推荐(0) 编辑

……一道数学题

摘要: 【问题描述】八是个很有趣的数字啊。八=发,八八=爸爸,88=拜拜。当然最有趣的还是8用二进制表示是1000。怎么样,有趣吧。当然题目和这些都没有关系。某个人很无聊,他想找出[a,b]中能被8整除却不能被其他一些数整除的数。【输入文件】输入文件eight.in。第一行一个数n,代表不能被整除的数的个数。第二行n个数,中间用空格隔开。第三行两个数a,b,中间一个空格。【输出文件】输出文件eight.out应包含一个整数,为[a,b]间能被8整除却不能被那n个数整数的数的个数。【样例输入】37764 6082 4622166 53442【样例输出】6378【数据规模】对于30%的数据, 1≤n≤5, 阅读全文
posted @ 2011-11-03 17:49 ushiojamie 阅读(263) 评论(0) 推荐(0) 编辑

打砖块【动态规划】(我的动态规划到底是有多 烂!)

摘要: 【题目描述】在一个凹槽中放置了n层砖块,最上面的一层有n块砖,第二层有n-1块,……最下面一层仅有一块砖。第i层的砖块从左至右编号为1,2,……i,第i层的第j块砖有一个价值a[i,j](a[i,j]<=50)。下面是一个有5层砖块的例子: 如果你要敲掉第i层的第j块砖的话,若i=1,你可以直接敲掉它,若i>1,则你必须先敲掉第i-1层的第j和第j+1块砖。 你的任务是从一个有n(n<=50)层的砖块堆中,敲掉(m<=500)块砖,使得被敲掉的这些砖块的价值总和最大。【输入格式】你将从文件中读入数据,数据的第一行为两个正整数,分别表示n,m,接下来的第i每行有n-i+1 阅读全文
posted @ 2011-11-02 21:31 ushiojamie 阅读(467) 评论(1) 推荐(0) 编辑

双向BFS

摘要: 转 http://www.cppblog.com/Yuan/archive/2011/02/23/140553.html如果目标也已知的话,用双向BFS能很大提高速度单向时,是 b^len的扩展。双向的话,2*b^(len/2) 快了很多,特别是分支因子b较大时至于实现上,网上有些做法是用两个队列,交替节点搜索×,如下面的伪代码: while(!empty()){ 扩展正向一个节点 遇到反向已经扩展的return 扩展反向一个节点 遇到正向已经扩展的return }但这种做法是有问题的,如下面的图:求S-T的最短路,交替节点搜索(一次正向节点,一次反向节点)时Step 1 : S . 阅读全文
posted @ 2011-10-31 22:12 ushiojamie 阅读(218) 评论(0) 推荐(0) 编辑

欧拉图与汉密尔顿图(转)

摘要: 转自: http://class.htu.cn/lisanshuxue/neirong/7_4.htm 1936年瑞士数学家列昂哈德·欧拉(Leonhard Euler)发表了图论的第一篇论文“哥尼斯堡七桥问题”。这个问题是这样的:哥尼斯堡城市有一条横贯全城的普雷格尔(Pregel)河,城的各部分用七座桥联接,每逢假日,城中居、民进行环城逛游,这样就产生了一个问题,能不能设计一次“遍游”,使得从某地出发对每座跨河桥只走一次,而在遍历了七桥之后却又能回到原地。在图7-4.1中画出了哥尼斯堡城图,城的四个陆地部分分别标以A、B、C、D。将陆地设想为图的结点,而把桥画成相应的连接边,这样城 阅读全文
posted @ 2011-10-31 21:48 ushiojamie 阅读(847) 评论(1) 推荐(0) 编辑

序列长度【差分约束】

摘要: 【问题描述】 有一个整数序列,我们不知道她的长度是多少(即序列中整数的个数),但我们知道在某些区间中至少有多少个整数,用区间 [ai,bi,ci]来描述它,[ai,bi,ci]表示在该序列中处于[ai,bi]这个区间的整数至少有ci个。现在给出若干个这样的区间,请你求出满足条件的最短序列长度是多少。如果不存在则输出 -1。【文件输入】 第一行包括一个整数n(n<=1000),表示区间个数; 以下n行每行描述这些区间,第i+1行三个整数ai,bi,ci,由空格隔开,其中0<=ai<=bi<=1000 而且 1<=ci<=bi-ai+1。【文件输出】 文件输出只 阅读全文
posted @ 2011-10-31 19:26 ushiojamie 阅读(259) 评论(0) 推荐(0) 编辑