链接:UVa 10003
题意:给出一根木棍的长度,及木棍上的n个点,要在这n个点处切断木棍,在切断木棍时木棍有多长就花费多少代价,求将给定的所有点都切断的最小代价
分析:这个是区间dp的题,用dp[i][j]数组表示在区间[i,j]内切割木棍的最小代价,
则状态转移方程为dp[i][j] = min(dp[i][j], dp[i][k]+dp[k][j]+a[j]-a[i])
...
分类:
其他好文 时间:
2014-08-09 11:49:07
阅读次数:
263
题目链接:
啊哈哈,点我点我
题意:
有n个幼儿园的孩纸,然后从中找出m对孩子能够让他们看到双方,这样以便他们交流。。
思路:
首先可以考虑把n-1个人已经排成了m-2对,那么只需要把这个最矮的随便插在队伍就可以凑成m对了。另外一种情况是先排成m-1对,然后把最矮的那一个放在对首或者队尾,这样就到了状态转移方程。
if(j>=2)
dp[i][j]=dp[i-1][j-2]*(i...
分类:
其他好文 时间:
2014-08-09 11:41:41
阅读次数:
218
典型的给出区间任务和效益值,然后求最大效益值的任务取法。
属于一维DP了。
一维table记录的数据含义:到当前任务的截止时间前的最大效益值是多少。
注意, 这表示当前任务一定要选择,但是最终结果是不一定选择最后一个任务,故此最后需要遍历找到table数组的最大值,当然计算过程中使用一个数记录最终最大值也是可以的。
状态转移方程就是: tbl[i] = MAX({from tbl[0]->...
分类:
其他好文 时间:
2014-08-09 02:38:57
阅读次数:
234
看到Palindrome的题目,首先想到的应该是中心问题,然后从中心出发,思考如何解决。
DP问题一般是从更加小的问题转化到更加大的问题,然后是从地往上 bottom up地计算答案的。
能得出状态转移方程就好办了,本题的状态转移方程是:
if (cowID[i] == cow{j]) tbl[id][i] = tbl[id][i+1];//相等的时候无需改动
else tbl[id][i...
分类:
其他好文 时间:
2014-08-09 00:14:16
阅读次数:
344
LCS属线性结构上的动态规划,应该是动规里面很简单的一种类型。
最长公共子序列问题,一旦明确了状态,找到状态转移方程还是很简单的。但是对于本题来说,难点之一就是会很难想到该如何定义状态。
作为一只菜鸟,兹认为此题很复杂。
首先我是想不到每一步都把没到终点的字母全加上1,以及这种效果与你去找开始和结束的效果是一样的。
甚至,若不是在做动规的专题,我根本想不到这样的题目,会用动规来解决。
再...
分类:
其他好文 时间:
2014-08-07 19:14:11
阅读次数:
256
错的我真是无语。。。还是状态的把握不准确。。
起始状态转移方程是很重要,但是只推出了方程是不够的
对边界状态的处理,对特殊状态的处理,这些都很重要,错了任何一个小地方,都会导致WA....
细节!更清晰的思路,更全面的考虑!
#include
#include
#include
using namespace std;
int n,t;
int v[55];
int d[55][1000...
分类:
其他好文 时间:
2014-08-07 19:11:09
阅读次数:
228
借着前面的 白话背包之01背包 的基础,来结合图看看完全背包是个什么东东,希望以后自己看能一目了然,能对刚接触的童鞋有帮助是最好不过滴
一:关于完全背包
有N个物品,每个物品(有无限多个) i 对应有重量w[i]、价值va[i]。有一个背包可以放M重的物品,现在让你从N钟物品中选择一些物品,在不超过背包上限情况使得背包装的价值最大。
二:初步了解完全背包算法
那么这里看看状态转移方程...
分类:
其他好文 时间:
2014-08-07 13:07:40
阅读次数:
235
题目链接:Click
Here~
题意分析:
给一根长为L的木棒,然后给出要切的N处地方。要你用最少的花费完成这项任务。而花费是如何计算的呢?就是用当前木棒的长度是多少,那么花费就是多少。
算法分析:
运用记忆化的过程可以缩减很多时间,本题的实质是区间DP。原题是经典的石子合并问题。如果,感觉不好理解可以想想图论中的Flody模型。
状态转移方程:dp[i][j...
分类:
其他好文 时间:
2014-08-05 14:18:29
阅读次数:
191
第一次做动规题目,以下均为个人理解以及个人方法,状态转移方程以及状态的定义也是根据个人理解,请过路大神指教。
状态:每一列的每一个数[ i ][ j ]都是一个状态;
然后定义状态[ i ][ j ]的指标函数d[ i ][ j ]为从[ i ][ j ]向右出发的可以得到的最小的整数和;
状态转移方程:d[ i ][ j ]=min(d[ i+1 ][ j+1 ][ i-1 ][ j+1 ...
分类:
其他好文 时间:
2014-08-04 21:43:48
阅读次数:
292
题意:
给一个n个数的数列,从中取一些数构成新数列,
如果新数列中有一些数的和是k,那么这就是一个好数列,问这样的数列的个数。
n,k
状态:dp[][state] 中state的二进制每一位表示和为(1~k),1表示可以取到,0表示取不到。
状态转移方程:dp[i][state] = sum(dp[i-1][state']); state = 1
...
分类:
移动开发 时间:
2014-08-03 18:08:55
阅读次数:
269