京东合唱队
动态规划:all[i]表示以第i位数结尾的最大分组数,max[i]表示以i结尾的数组里面的最大的数字,all[i]=all[k]+1(vec[i]>=max[k])测试用例都过了,为啥AC0.38,求大佬指出错误!
#include <iostream> #include<vector> #include<map> #include<algorithm> using namespace std; int main() { int n; cin >> n; vector<int> vec; for (int i = 0; i < n; i++) { int k; cin >> k; vec.push_back(k); } vector<int> all(n); vector<int> max(n); all[0] = 1; max[0] = vec[0]; for (int i = 1; i < vec.size(); i++) { int j = i - 1; for (; j >= 0; j--) { if (max[j] <= vec[i]) { all[i] = all[j] + 1; if (vec[i] > max[i - 1]) max[i] = vec[i]; else max[i] = max[i - 1]; break; } } if (j == -1) { max[i] = vec[i]; all[i] = 1; continue; } } cout << all[vec.size() - 1]; }