Codeforces 3D Least Cost Bracket Sequence 贪心

来源:互联网 发布:金再来实战指标源码 编辑:程序博客网 时间:2024/05/18 01:48

这是一个好题

要想保证括号的合法性,就得在遇到一个括号的时候就判断之前的左括号是不是少于右括号,如果少于就给他扳过来。

#include <iostream>#include <string>#include <queue>using namespace std;class node{public:long long p,idx;node( long long ap=0 ): p(ap),idx(0) {}bool operator<(const node& a) const { return p<a.p; }};priority_queue<node> q;int main(){string s;cin >> s;int ln=0;int len=s.size();long long cost=0;for( int i=0;i<len;i++ ){if(s[i]=='(') ln++;else if(s[i]==')') ln--;else{long long cl,cr;cin >> cl >> cr;cost+=cr;node t;t.p=cr-cl;t.idx=i;q.push(t);s[i]=')';ln--;}if( ln<0 ){if(q.empty()) break;node t=q.top();q.pop();s[t.idx]='(';cost-=t.p;ln+=2;}}if(ln!=0){cout << -1 << endl;return 0;}cout << cost << endl;cout << s << endl;return 0;}

原创粉丝点击