本文共 1361 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要找到给定颜色条带中最长的子串,该子串与Eva的最爱颜色序列相同。我们可以使用动态规划来解决这个问题。
dp[i][j] 为Eva的最爱颜色序列的前 i 个颜色在颜色条带的前 j 个颜色中的最长子串长度。dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + 1。dp[i][j] = max(dp[i-1][j], dp[i][j-1])。dp[0][j] 和 dp[i][0] 都为0,因为没有颜色匹配的情况下,长度为0。#include#include using namespace std;int main() { int n, m, l; cin >> n >> m >> l; vector favorited(m + 1); for (int i = 1; i <= m; ++i) { cin >> favorited[i]; } vector stripe(l + 1); for (int i = 1; i <= l; ++i) { cin >> stripe[i]; } vector > dp(m + 1, vector (l + 1, 0)); for (int i = 1; i <= m; ++i) { for (int j = 1; j <= l; ++j) { if (favorited[i] == stripe[j]) { int option1 = dp[i-1][j]; int option2 = dp[i][j-1]; dp[i][j] = max(option1, option2) + 1; } else { dp[i][j] = max(dp[i-1][j], dp[i][j-1]); } } } cout << dp[m][l] << endl; return 0; }
dp,用于存储每个状态的最长子串长度。dp 表中的值,根据当前颜色是否匹配Eva的最爱颜色来决定状态转移。dp[m][l],即Eva的最爱颜色序列在颜色条带中的最长子串长度。这种方法通过动态规划有效地解决了问题,确保了在合理的时间复杂度内找到最优解。
转载地址:http://lstuz.baihongyu.com/