2011年5月2日
摘要: 1、首先考虑一维的最大子段和问题,给出一个序列a[0],a[1],a[2]...a[n],求出连续的一段,使其总和最大。a[i]表示第i个元素dp[i]表示以a[i]结尾的最大子段和dp[i] = max{a[i], dp[i-1] + a[i]}解释一下方程:如果dp[i-1] > 0,则 dp[i] = dp[i-1] + a[i]如果dp[i-1] < 0,则 dp[i] = a[i]因为不用记录位置信息,所以dp[]可以用一个变量dp代替:如果dp > 0,则dp += a[i]如果dp < 0,则dp = a[i]2、考虑二维的最大子矩阵问题我们可以利用矩阵压 阅读全文
posted @ 2011-05-02 21:36 geeker 阅读(988) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2577设定两个记录数组,dp[i][0],dp[i][1],代表前i个字母所需要的最小按键数目。区别在于,dp[i][0]的情况是,w[i]这个字母(也就是最后一个)是在lock建关闭的情况下产生的最小数目。而dp[i][1]是在lock建打开的情况下产生的最小数目。因此分别考虑每种情况的dp公式char w[]数组记录字符串当w[i]为大写字母的时候,因为字母种类不是大写的就是小写字母,所以if(w[i]<=‘Z’)一句判断足矣。dp[i][0] = min(dp[i-1][0]+2,dp[i-1][ 阅读全文
posted @ 2011-05-02 21:05 geeker 阅读(375) 评论(0) 推荐(0) 编辑