• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






This_poet——Only a poet

为省队而奋斗,为NOI而奋斗!This_poet@126.com
 
 

Powered by 博客园
博客园 | 首页 | 新随笔 | 联系 | 订阅 订阅 | 管理

2011年9月21日

POJ3276 Face The Right Way——数学优化——pku3276
摘要: 本题的朴素算法很容易想出:枚举k,然后判断这个k所需要的调转次数m,并用m更新答案。但是,在求k的掉转次数m时,只要找到一个面向后面的牛,就要将它后面的k头牛再调转一遍,这样很容易浪费大量时间。也就是说,在最坏的情况下,复杂度趋近于O(n^3)!这是不可以的,必须考虑优化。优化方法如下:在读入时做一个巧妙的处理,设map数组表示这个位置上牛的状况,map[i]=0表示这头牛的方向与前一头相同,map[i]=1表示这头牛的方向与前一头牛不同。默认第0头牛的方向为向前(也就是F)。我们要做的就是将所有的牛的方向调转至和第一头牛相同。那么,每一次对于牛i,调转从牛i开始的k头牛,是不会改变这k头牛的 阅读全文
posted @ 2011-09-21 15:24 This_poet 阅读(627) 评论(0) 推荐(0)
 
POJ3267 The Cow Lexicon——动态规划——pku3267
摘要: 简单的动态规划。状态转移方程:f[i]=Min{f[i-1]+1,Make(i)}其中Make为自定义函数:表示取了i这个位置上的字符之后前面至少要删掉多少个才能满足条件。代码如下:Program Lexicon;//By_ThispoetConst maxn=300;Var i,j,k,m,n :Longint; f :Array[0..maxn]of Longint; std :Array[1..maxn*2]of String[25]; word :Array[0..maxn]of Char; temp :Longint; Function Mi... 阅读全文
posted @ 2011-09-21 08:13 This_poet 阅读(366) 评论(0) 推荐(0)
 
POJ2373 Dividing the Path——动态规划+单调队列优化
摘要: 利用单调队列进行动态规划。状态转移方程很容易写出来的:f[i]=Min{f[j]}+1(i-2*b<=j<=i-2*a)这样,时间复杂度最坏情况下是O(n^2)的,对于n<=1000000的数据来说,程序根本无法承受怎么办呢?单调队列很强大!维护一个单调队列,队列里存的是按符合条件的f数组内值严格单调递增的下标值。很显然,利用队首元素就可以直接转移了。队首元素要满足的条件很简单嘛,i-2*b<=seq[h]<=1-2*a中间有一些小小的技巧,比如说,计算每个f值的时候,不是计算出来就将它插入到队列里,而是在计算f[i+2*a]之前把它插入队列中。不过说了,CODE 阅读全文
posted @ 2011-09-21 07:23 This_poet 阅读(1099) 评论(0) 推荐(0)