清华大学机试 需要二刷 *贪心算法,比较虎人
基本思想:
想到贪心,但是觉得时间复杂度太高,结果一不小心写出来个更复杂的贪心;
关键点:
注意特殊用例,有可能无法遍历出正确结果,即没有切换得到正确的值,此时要避免进入死循环;
#include<iostream> #include<vector> #include<algorithm> #include<string> #include<cmath> #include<set> using namespace std; const int maxn = 5010; int n,m; int dp[maxn][maxn]; vector<string>v1; vector<string>v2; int main() { while (cin>>n){ string s; for (int i = 0; i < n; i++) { cin >> s; v1.push_back(s); } cin >> m; for (int i = 0; i < m; i++) { cin >> s; v2.push_back(s); } int cnt = 0; int index = 0; bool flag = true; while (index != m&&flag) { int mx = 0; int mindex = 0; int st = index; for (int i = 0; i < n; i++) { int j = st; while (j<m&&v1[i] != v2[j]){ j++; } if (mx < j - index) { mx = j - index; mindex = j; } } if (mindex == 0) flag = false; cnt++; index = mindex; } if(flag) cout << cnt-1 << endl; else cout << -1 << endl; } return 0; }