摘要:
题目链接:HRBUST 1819 石子合并问题--圆形版 题目大意: 题解: 区间$dp$模板题,由于是圆形操场,所以将数据再拓展一遍,用前缀和存储石子堆数量。 #include <iostream> using namespace std; #define INF 0x3f3f3f3f int d 阅读全文
摘要:
题目链接:51Nod 1183 编辑距离 题目大意: 题解: 设$dp[i][j]$为字符串$A$的前$i$个字符变成字符串$B$的前$j$个字符需要的最小操作数。 若字符串$A$的第$i$个字符与字符串$B$的第$j$个字符相等,则问题变成将字符串$A$的前$i-1$个字符变成字符串$B$的前$j 阅读全文
摘要:
题目链接:51Nod 1006 最长公共子序列Lcs 题目大意: 题解: 最长公共子序列模板题,设$dp[i][j]$为字符串$A[1...i]$与字符串$B[1...j]$的最长公共子序列长度,则状态转移方程为: \(dp[i][j] = max\{dp[i-1][j-1] + (A[i] == 阅读全文
摘要:
题目链接:HRBUST 1377 金明的预算方案 题目大意: 题解: 将主件和其附件分为一组,组内包含主件、主件和附件$1$、主件和附件$2$、主件和附件$1,2$至多四个物品。 对所有组进行$01$背包,每组只能选一个。 #include <cstring> #include <iostream> 阅读全文
摘要:
题目链接:51Nod 2649 完全背包 题目大意: 题解: 完全背包模板题。 #include <iostream> using namespace std; int dp[50010], v[110], c[110], n, V; int main() { cin >> n >> V; for 阅读全文
摘要:
题目链接:计蒜客 T2129 采药 题目大意: 有许多药材,都有各自采摘需要的时间和其价值,要求在规定时间内采药使获得的价值最大。 题解: $01$背包模板题。 #include <iostream> using namespace std; int dp[1010], t, m, w, v; in 阅读全文
摘要:
题目链接:计蒜客 T1408 矩形嵌套 题目大意: 题解: 按宽对矩形从小到大排序,宽相等的矩形长更大的在前面,再对矩形的长计算最长升。 #include <algorithm> #include <iostream> using namespace std; int dp[1010], len, 阅读全文
摘要:
题目链接:OpenJudge 2711 合唱队形 题目大意: 题解: 正反各求一次最长上升序列,对每个点取正反两次以该点为最高点的最长上升子序列长度之和(注意该点被取两次,需要减一)即为以该点为最高点的最长合唱队列。 #include <algorithm> #include <iostream> 阅读全文
摘要:
题目链接:51Nod 2080 最长上升子序列 题目大意: 求最长上升子序列长度。 题解: 最长升模板题。 #include <algorithm> #include <iostream> using namespace std; int dp[1010], len, a[1010], n; int 阅读全文