自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhdshr的博客

匪兕匪虎,率彼旷野

  • 博客(19)
  • 资源 (1)
  • 收藏
  • 关注

原创 动态规划

本文希望对在程序设计竞赛中的动态规划算法做一个有限范围的全面的总结。      从解决问题的角度上来说,把动态规划看成两个部分:        1.使用子空间之间的递推来解决最优问题的高效(时间优化)算法        2.基于子问题解的某些量计算来解决全部空间某个量的困难问题算法     下面详细的分类讨论这两个思路在各种问题中的体现。 一.有向无环图的路径规划和处理问题     在

2016-05-14 12:32:07 682 1

原创 LA2995(迭代更新)

题目看上去很棘手,但是仔细想一想,可以找到解决办法。 难点在于,如何解决的姿势。 比如此题,如果只用一个视图位置三维数组,很多点的判断就要写成繁杂的条件判断。 多重循环代码的简化也是很重要的问题。不然调试过程都十分困难。 以下代码逻辑清晰,而且比较精简。需要多多体会,至于所应该的收获,并不是那么明显。 #include using namespace std; #define re

2015-09-23 16:13:36 407

原创 uva11300(抽象,推导)

题目的数据n很大,所以如果直接模拟,或者暴力搜索都是不太可能的。 直观上问题的表象很复杂,抽象就是一种强大的方法。 诸如此类的问题应该如何考虑呢。 首先,通过样例尝试找到某些不变性和等效性。而这些性质是算法产生优化的基础。 之后要进行数学抽象,转化成已解决的问题,或者自己推导到可以解决的地步,并记住这个方法。 如果设出转移量,那么一个人只需考虑他旁边的两个转移,n个人的转移变量数为n个,

2015-09-22 21:33:48 1045

原创 2015沈阳网络赛总结

赛场上深刻感受到了,算法竞赛巨大的台阶压力,对建诸于高级数据结构和算法的解决策略来说, 处于当前知识水平的我是无法在部分有效的思考时间内找到方法的,即使假设具有最深入的有效的 思考方式,走过前人的知识发展路径,所花费的时间也是几何级数的。 问题在于,同阶段水平的巨大差异,除了基本解释——思维方式的滚雪球效应,其本质在什么地方呢。 就在系统性的考虑之上,当前的最优策略总是显而易见,但是对于较

2015-09-19 22:39:11 571

原创 acm的一点思考

今天看背包九讲,发现一句话:“思考”是一个OIer最重要的品质。简单的问题,深入思考以后,也能发现更多。 思考这件事情的重要性不必多说。 关键在后边那句话,简单的问题经过深入思考之后,能发现更多。 现在我要考虑的是对于一个简单问题来说,深入思考是不是必要的。 首先,如果把每一个问题看作自然界规则集合的一个局部演化,并且把规则的总数当成有限的, 那么每解决一个问题,都有概率让下一个问题的解

2015-09-05 10:53:45 369

原创 usaco Agri-Net

稠密图的最小生成树 使用prim算法/* ID:zhdxzwj1 LANG:C++ PROG:agrinet */ #include int flag[102][102]; int seen[102]={0}; int parent[102]; int dist[102]={0}; int main() { freopen("agrinet.in","r",stdin); fr

2015-09-04 20:14:50 250

原创 usaco Cow Tours

多源最短路 弗洛伊德算法+并查集 很适合用来训练图论的思维/* ID:zhdxzwj1 LANG:C++ PROG:cowtour */ #include double ma[152][152]; char flag[152][152]; char fei; double d[152]; double dd[152]={0}; struct vertex { int x,y; }v[1

2015-09-04 20:04:53 311

原创 usaco Money Systems

先看一个状态方程 dp【i】+=dp【i-value【i】】 钱总和为i的方案数等于所有钱总和为(i-某一个面值的)的方案数。 对不对呢? 仅从表面上来看是不对的,因为有可能产生重复,例如dp【4】【1】和dp【4】【2】可能都包含了1+2+1和1+1+2。 下面对比着我们写另一种 dp【i】【sum】=dp【i-1】【sum-value[i]】+dp【i-1】【sum】 含义是用前

2015-09-04 20:01:14 330

原创 usaco Cow Pedigrees

这又是一道典型的dp问题,其表观特点在于难以下手,解决这类问题重要的一点是,一定要考虑清楚状态转移方程的含义,不要为追求简洁而丧失错误性。 我们来详细的分一下,这个问题的动态规划过程。 首先是观察树的结构特点,每一课深度为i的树都可以由两颗子树加上一个根节点构成。由此来考虑递推的过程,我们想要知道节点数和深度确定的树的个数。 设其深度为i,节点数为j,去掉根节点,节点数变为j-1,所以两颗子

2015-09-04 18:58:08 356

原创 usaco Longest Prefix

很多看上去无从下手,或者暴力的复杂度超乎想象到实现都很困难的时候,可以考虑下两个临近状态的关系,通过状态的转移方程来解决问题。 拿这道题来说,我们要找可能的最长前缀,首先考虑最大子串(长度为n),也就是本身能否被组成,这个问题很复杂,但可以分解为,这个串减去所有构成元素后的子串能否被组成,也就是考察从若干个前面的状态是否可以推出下一个状态,只要有一个满足,dp【n】就应该置为1。 那么代码写出

2015-09-04 16:33:31 451

原创 usaco Party Lamps report

这道题核心的算法是搜索,然后用状态压缩(位运算)来优化。 有必要好好体会一下位运算具体的实施过程,把一些看起来不太容易用位运算做的问题使用其来提速。 换句话讲,每一个步骤都考虑到其最优的可能对于整体性能的提升是很重要的。 首先1《《a,可以表示一个在第a位置上是1的数,如果现在用一个状态数b,b&a用来检测b的第a位置上是否为1. |的作用往往体现在添加状态,b|a可以使第a位变成1,无论

2015-09-04 15:53:10 424

原创 usaco Subset Sums

对于没有接触过背包的初学者来说,想出这道题的动态规划算法很困难。 纠结了我很长时间,何必说是我的智商问题呢?有些东西可以遮掩,然而做题就要把一个点弄得透彻,正如某句话,理解越深,达到的高度越高。(非原话) 现在论述一下我的看法: 1.对于某个数字,它的拆分方案数,可以分成两部分组成。 假设数字为i,其和为sum,sum=(i+1)*i/4,它的前一数字是i-1,i-1个数字挑选出和为sum

2015-08-16 20:53:56 329

原创 usaco Healthy Holsteins individual report

由于每一种维生素的含量都会制约选择,所以通过搜索来找到最佳的选择几乎是必须。 初始想法是先考虑一种,逐渐再考虑更多的种数,如果有符合的就在这一层停止搜索。 实现过程中,问题是,如何把2^15种情况按种类增加的顺序搜索。 一种方法是状态压缩,用一个数字的不同位数信息来表示一个较大的数组或者其他需求空间很大或操作时间很长的数据结构。 用2^n逐一枚举,利用&运算判断第几个位置也是第几种饲料是否

2015-08-16 16:43:24 285

原创 一六日临想

盖自训练以来,诸事不顺,报有前进,自封山王,不知大任将至。吾起于东山之后,所当者破,所击者服,值一败北,落无安身之处。 今者行将就木,激荡之气,塞然胸间也。 高明神行者,安有过人之处乎。碌碌今日者,岂是前尘已定。君既不行南墙之下,一日不可有退涣之心。 至于回天无力,万事皆空,何悲之有哉?一题后报,一事多行,吾辈无能,故为乡党所笑,留恋于醉梦生魂。 昭光普射于厚土,凉风过我之胸襟,自谓羲皇上

2015-08-16 12:54:23 318

原创 usaco Wormholes individual report

这是一道很好的模拟题 它考查了相当多的细节问题。 包括 1递归生成偶数个黑洞任意两个相连的组合。 2读取信息后,生成水平向右的查找表,加快速度。 如何通过递归来遍历所有的可能组合呢? 方法1:通过dfs构建排列,删除掉不可能的情况 方法2:通过。。。写不出通用的模式 建议练习写出所有构造方法,很重要。 标程写的太好了: #include #include using n

2015-08-14 08:50:43 317

原创 usaco Arithmetic Progressions individual report

核心方法暴力搜素 剪枝的关键在于: 1利用空间复杂度换取时间复杂度,查找某个元素是否在数列中时,直接利用总长的数组,该数组已在第一次赋值时进行标记。 2由等差数列的长度要求,减少公差的枚举次数,枚举公差后对应的枚举首项时,去掉公差对应的不可能的首项。 upperdef = upper/(n-1); //第一次剪枝 for ( def = 1; def<=upperdef; def++

2015-08-14 08:43:54 396

原创 usaco Mother's Milk individual report

此题的特点在于它的解是一个向六个方向扩展的解答树,我们可以用dfs来做搜索,由于该解答树的扩展是无限的。必须做好回溯的判断标准。 对于如何写dfs的问题,我的看法是,找准某个节点的对应信息量,换句话讲,某个状态,三个瓶子里的牛奶量是进行下一次深入的参数。 所以dfs函数中要包含三个参数,进行六次递归。 在时间问题上,dfs往往比较耗时,可行的提速方法是利用队列或栈的高速缓存,或者是避免状态重

2015-08-14 08:26:31 369

原创 usaco Super Prime Rib individual report

这道题目意思很简单,关键在于解决素数判定的耗时和打表产生的空间问题。   可以发现的第一个关键点,即每一位的sprime都基于上一位的sprime,而下一位对前一位无后效性影响。所以可以从位数由低到高,动态规划地产生一层层的解。 最后查询目标位数的解即可。 动态规划的过程可以由迭代来实现。它的来源是递归的问题描述,换句话讲就是bfs的搜索过程。 递归搜索的代码如下: void spr

2015-08-14 07:46:38 277

原创 开通博客的第一天

我写下文章的这一刻正处于我年轻的时期,充满着这个时代的人们所应有的激情与困惑。 如果说,通往终极世界的道路是存在的,那么我们所有的努力都不是白废,或是指出哪条路是错的,或是前进了一小段。 所以,我准备写下从今以后的前进历程,分享过程中的变化细节,期望得到关于未来的启示,不至于在难以想象的变革来临之前无力施展。 欢迎诸位浏览、指正,提出建议。

2015-07-02 15:59:51 369

windows7系统优化

windows7系统优化,提供了一些简单的操作步骤

2014-09-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除