Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
贴个WA答案,讲讲过程#include<iostream> #include<vector> #include<string> #include<iterator> #include<algorithm> #include<sstream> #include<set> #include<map> #include<cstdio> #include<list> #include<utility> using namespace std; int main() { int n,k; cin>>n>>k; vector<int> list(1,0); for (int i=0; i<n; ++i) list.push_back(*istream_iterator<int>(cin)); list.push_back(0); map<int, int> higher; int lower_than_l(0),lower_than_r(0),lg=0; for (int i = 1; i <= n+1; ++i) { if (list[i]<list[i-1]) { lower_than_l = i; lg = 1; }else if (lg && list[i]>list[i-1]) { higher[lower_than_r] = lower_than_l; lower_than_r = i-1; lg = 0; } } higher[lower_than_r] = lower_than_l; vector<int> solving; int level,sum; for (map<int, int>::iterator it = higher.begin(); it != higher.end(); ++it) { sum = 0; level = max(list[it->first], list[it->second]); for (int i = it->first+1; i < it->second; ++i) { if (list[i] > level) { sum += list[i] - level; }; } solving.push_back(sum); } sort(solving.begin(), solving.end()); sum = 0; for (int i = 0; i < solving.size()-k; ++i) { sum += solving[i]; } cout << sum << endl; return 0; } in 6 1 4 1 3 2 3 1 out 4 但是此代码: out 2 原因 to 4 1 2 2 2 1 3个2 依然是峰 才知道这题这么难 流汗不止 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator