// 这是我的代码 #include <iostream> (30316)#include <vector> using namespace std; int main() { int n; cin >> n; if (n < 3) { cout << n; return 0; } vector<int> a(n); for(int i = 0; i < n; ++i) { cin >> a[i]; } int res = 2; vector<int> dp(n); // vector<int> idx(n); 应该把长度相同的前一个下标记录在数组里 unordered_map<int, vector<int>> m; dp[0] = 1, dp[1] = 2; m[0] = {-1}, m[1] = {0}; for (int i = 2; i < n; ++i) { for (int j = 0; j < i; ++j) { for (int k = 0; k < m[j].size(); ++k) { if (m[j][k] == -1 || a[m[j][k]] == a[i]) { if (dp[j] + 1 >= dp[i]) { dp[i] = dp[j] + 1; m[i].push_back(j); } } } } res = max(res, dp[i]); } cout << res; return 0; }
点赞 评论

相关推荐

牛客网
牛客企业服务