[poj]动态规划1015
来源:互联网 发布:js id选择器 编辑:程序博客网 时间:2024/06/12 05:47
被这个题折磨了好久好久……得有两三天吧,太丢人了
知道使用dp的思路来做,但是第一次dp的思路错误了,认为在每一个规模为a的问题中差的绝对值最小时,沿着这条路线,再继续选择在当前差值上增加的值最小的元素就可以了。
比如:
4 2
5 4
5 4
9 0
0 9
这个集合,明显应该选后两个,但是沿着刚才的思路的话,选择的结果是前两个。
这也证明了局部最优不等于全局最优。
在知道思路错了之后,看了别人的解题报告,了解了正确的想法,但是看得不够仔细,自己写的时候出现了很多很多错误……
正确思路是:
用两个数组dp[i][j]和path[i][j],i表示正在选的是第几个元素,j表示选了i个元素后的差的绝对值(用的是枚举的办法,记录下每次选一个元素后每个可能的值),dp的值是使取得j的时候的当前和值(包括前面选的元素的和值),path保存的是当前选的这个元素的下标。计算的时候,要保证 本次选的元素以前没有被选 以及 如果有多个元素可以使j取某一值,选择和值最大的那个。
因为差值可能去负数,所以在计算时在j值上加上了一个常数,防止数组越界。
算完了这两个数组后,可以找到选择了最后一个元素后,j最小而且dp[][j]最大的那个元素,然后沿着path数组倒序查找就可以找到全部选择(有点类似Viterbi算法)。
1. 由于这个子问题划分的思路很别扭,写的时候总是思考的太慢,在写代码上就花了不少时间。
2. 涉及的数组多,在下标犯了几个错误,看来我还是不够细心……
3. 忘记了每轮计算结束后,重新初始化所需要的变量。
4. 在循环中,赋值与下标的关系要计算好,而且不要忘记给一些元素赋值,总之,写这些略复杂的逻辑的时候,一定要细心。写的时候多花几分钟,debug的时候可以省下几十分钟……
- [poj]动态规划1015
- poj 1015 动态规划 难
- poj 1015 Jury Compromise 动态规划
- POJ 1015 陪审团人选 [动态规划]
- POJ 1015 公正陪审团问题 动态规划
- POJ 1015-Jury Compromise动态规划
- 经典动态规划题目(POJ 1015)
- poj 1015 Jury Compromise 动态规划
- poj 2411 动态规划
- Poj 1157(动态规划)
- POJ 1651动态规划
- Poj 1221 动态规划
- POJ 3186 动态规划
- [poj]动态规划2479
- [poj] 动态规划 1141
- POJ 1088 动态规划
- poj 1636 动态规划
- poj 1159 动态规划
- 用坐标计算里程
- INF文件详解
- poj 1204 Word Puzzles
- C++类型转换
- 闲话----梦里的故事《少林故事新编》
- [poj]动态规划1015
- ubuntu英文环境下使用中文输入法
- Deployment of very large databases (10TB to PB range) with Automatic Storage Management (ASM) [ID 368055.1]
- ACM PKU POJ 1740 解题报告 -- 男人八题之四
- 中断INT 0x80的作用[转自csdn blog]
- 优秀程序员的十个习惯
- csh prompt 显示ip
- 将网页保存成图片插件
- Web Service描述语言 WSDL 详解