例题1

noiopenjudge9277

给出在最底层的木头的个数,问有多少种堆放木头的方式,当然你的堆放方式不能让木头掉下来.

在堆放的时候木头必须互相挨着在一起.

设dp[i]表示多少个log(原木)为底时的方案数。

dp[i]=dp[1](i-1)+dp[2](i-2).....dp[i-1]*1

这就是dp方程,不过好像是O(n^2)的,过不了

我们再看看看dp[i+1]

dp[i+1]=dp[1]i+dp[2](i-1).....dp[i]*1

发现dp[i+1]是dp[i]加上1~i dp值的和

然后使用前缀和,就可以O(n)处理


例题2

hdu4362

在连续的 n 秒中,在x轴上每秒会出现 m 个龙珠,出现之后会立即消失,知道了第0秒所在的位置,每从一个位置i

移动到另一个位置j的时候,消耗的价值为abs(i-j), 拿到龙珠也要消耗一个价值(不同龙珠的价值不同),问 n 秒之后最少消耗多少价值。

dp最基础的o(nm^2)很好想

我们考虑优化

abs很难看,我们拆开他,就是左起一次dp,右起一次dp,取最小值。

然后我们设一个数s,表示当前可以从s这个最优状态中转移

s如何求。我们只需要比较挖出上一个龙珠的价值加上和跑过来的价值,和单挖当前龙珠的价值就可以了。


例题3

hdu5009

给你一个数组,每个值代表一种颜色,每次选一个区间涂颜色,代价是区间内颜色种类数的平方,涂完所有数组,问你最小代价是多少。

o(n^2) 的dp很好想,然是我们仍然过不去2333.我们还是需要考虑加速

我们想一下,如果有数量相同种颜色的长度不同,右端点相同的区间,我们肯定是选长的。显而易见的贪心。

然后我们考虑记录每个颜色最晚的出现位置并维护(类似扫描)

用一个链表,每次按着颜色网后跳,最多跳\(\lfloor \sqrt{n} \rfloor\)次,时间复杂度就是O(\(n \sqrt{n}\));

对于五万的数据就是可以过了了。

最新文章

  1. jquery-lazyload延迟加载图片
  2. yii2输出sql语句
  3. c8051f320学习,单片机不外乎时钟、IO、串口、USB等外设用法
  4. Web性能测试基本指标
  5. ACM 田忌赛马
  6. crontab 移动日志-超越昨天的自己系列(12)
  7. PHP 图片文件上传代码分享
  8. IE自动化
  9. 解决"the currently displayed page contains invalid values"
  10. JQuery 左右拖动插件
  11. ##DAY4 事件的基本概念、触摸的基本概念、响应者链、手势
  12. mac和windows系统下 eclipse svn 设置代理服务器
  13. Linux使用小笔记<进程操作篇>
  14. windows编程初步
  15. 在ASP.NET MVC4中配置Castle
  16. 树的三种遍历方式(C语言实现)
  17. Mac上实现Python用HTMLTestRunner生成html测试报告
  18. TTL是什么意思?
  19. [剑指Offer]25-合并两个排序链表
  20. CF 1041 F. Ray in the tube

热门文章

  1. 在CentOS 7上搭建私有Docker仓库
  2. vue生命周期及使用 && 单文件组件下的生命周期
  3. TOJ 3488 Game Dice
  4. js中函数带不带var的本质区别是什么
  5. 【VirtualBox】快照
  6. git clone时的各种报错汇总
  7. js使用占位符替换字符串
  8. 2017 年 9 月 27 日 js(文本框内容添加到select)
  9. python学习(五)--打印错误信息
  10. 1229:密码截获----java