摘要:
题目链接:Fast Food 题意:一条直线上有n个饭店,问建造k个原料厂(仍旧在商店位置)得到的最小距离 分析:见代码 //一条直线上有n个饭店,问建造k个原料厂(仍旧在商店位置)得到的最小距离 //首先预处理从i到j的最小距离,可以知道选的点必为(i+j)/2,所以用dis[i][j]记录距离 阅读全文
摘要:
题目链接:反恐训练营 题意:本质上是求最大公共子序列,然后加上一个权值 分析:见代码 //公共子序列问题 //dp[i][j]表示前s1的前i个与s的前j个匹配得到的最大公共子序列 #include<cstdio> #include<cstring> #include<algorithm> usin 阅读全文
摘要:
题目链接:Max Sum Plus Plus Plus 题意:在n个数中取m段数使得这m段数之和最大,段与段之间不能重叠 分析:见代码 //dp[i][j]表示前i个数取了j段的最大值 //状态转移:dp[i][j]=max(dp[k][j-1]+(sum[k+l[j]-sum[k]或者sum[i] 阅读全文
摘要:
LCS问题,又称最长公共子序列问题,是DP中较简单的一种,今天我们就来简单讲解一下。 设s1:AEGLEGLLELGEL 设s2:LREGELGEGLEG 求两个字符串的最大公共子序列长度 输出:8 dp[i][j]表示匹配到s1的前i个与s2的前j个所得到的最大公共子序列长度。 转移方程: dp[ 阅读全文