菜鸡的第一个DP
来源:互联网 发布:谭浩强c语言第三版ppt 编辑:程序博客网 时间:2024/05/18 03:49
身为一个有志气的大学僧,我决定把我的专业学到精通,So,我参加了ACM,第一周和第二周,老师讲的是DP的入门,为了巩固知识,我将以博客的形式将我的知识记录下来。
第一个,数塔
数塔呢,是最经典的动态规划题目,从底层向顶层搜索一遍即可,令 i = n-2;从下至上搜索一遍即可。
它的核心代码为a [ i ][ j ] + = ( a [ i+1 ] [ j ] > a [ i+1 ] [ j+1 ]? a [ i+1 ] [ j ] : a [ i+1 ] [ j+1 ] );留下我的代码避免遗忘。
第二个呢,就是最长连续子序列的问题了。这个问题到现在我还是没有太清楚,看了几个小时后,代码记住了,先把我现在的思想记录下来,这个程序实现的是将当前的arr[ i ]
同第 i 个之前的数一一比较,如果没有比arr [ i ]小的 dp [ j ], 那么dp [ i ]=1,很明显的事情出现了,显然的,dp [ 1 ]=1,如果有比arr [ i ] 小的arr [ j ],那么如果有一个, 那么 dp [ i ]就加一,对dp[ i ]+1的操作由ans实现。
再过一些时日,彻底明白后,再重写一遍。
最长连续子序列的核心代码为 i f ( arr [ i ] > arr[ j ] && dp[ j ] > ans ) ans = dp[ j ] ; 用两个循环,i,j 分别为外层和内层循环的循环变量, 内层循环后再加上一句 dp[ i ]=ans + 1;
同样,附上代码。
时隔数日,我又看了看这个最长子序列,又有了新的认识,上面的ans是没什么卵用的,其实用dp[ i ]它本身是完全可以的,
经过数天的努力,模模糊糊的懂了裸01背包,我是在杭电上看到了十分简短的代码,于是我便用了最笨的方法,手写循环,看看它究竟发生了什么变化,经过努力,I see.
这个方法呢,是以第几件物品为变量,通过不断地比较来更新最佳方案,就是更新F[va]的值;核心呢是一个公式,即max(F[ j ],F[ j-v[ i ] ] + w[ i ]), i 呢,是第 i 个物品,
V[ i ]是第i个物品的体积,W[ i ]是它的价值;附有代码如下:
接下来呢,我要学习一下打表法,理解后,撰写到此处。
- 菜鸡的第一个DP
- HDU 1520 Anniversary party 我的第一个 树形DP
- HDU2084数塔(人生的第一个DP题)
- 第一个blog的第一个贴
- SDUTOJ 3023 X的畅想 我人生的第一个自己AC的DP题 && 递归
- 第一个的第一次
- 我的第一个
- 我的第一个
- 我的第一个博客第一篇文章!!!!!!
- hdu 1502 Regular Words DP + 高精度 第一个java
- 人生中的第一个dp(poj 1163)
- 我的第一个Blog!
- 我的第一个blog
- 我的第一个Robocode
- 我的第一个GMaiL
- 二零零四年的第一个秋天
- 我的第一个BLOG
- 我的第一个HelloWorld
- CSDN学霸课表——网络规划设计师(软考高级)
- ASP.NET页面之间传递值的几种方式
- C# TreeView 连续点击 不触发AfterCheck事件
- 解决eclipse看源码出错的问题
- int *ptr=(int *)(&a+1),对数组名取地址是取的整个数组的地址
- 菜鸡的第一个DP
- Spring+SpringMVC+Mybatis+Mysql整合实例
- LeetCode算法题——16. 3Sum Closest
- 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
- linux下的mysql启动、停止、重启,状态 命令操作
- unity之碰撞检测
- 【ZJOI2017】仙人掌 题解
- ubuntu安装MySQL并导入数据
- [BZOJ4771]七彩树