Codeforces 3D Least Cost Bracket Sequence (贪心)
2013-11-16 20:32
519 查看
题意: 给出一个包含问号的括号序列,给出每个括号变成 '(' 和 ')'的代价,求将全部问好转换后,序列合法的最小代价。
解法: ‘ 合法序列 ’ 意为序列在从左往右的过程中任意时刻左括号数量不小于右括号,考虑利用该性质:假设现在遍历到位置i,那么在0~i-1的序列都保证合法,若i 为‘)’并且使得0~i序列变为不合法,由于当前不合法状态一定是左比右少1,因此只需要改变0~i的一个')'变成‘(’就可以让0~i变为合法序列,显然我们会选择0~i中转换代价最小的。因此不妨将所有的问号都先置为')',再从左往右维护合法性,每次的选择都是保证当前0~i段合法的最小代价,当i等于len时也成立。用优先队列动态维护当前0~i段')‘的最大b-a。
解法: ‘ 合法序列 ’ 意为序列在从左往右的过程中任意时刻左括号数量不小于右括号,考虑利用该性质:假设现在遍历到位置i,那么在0~i-1的序列都保证合法,若i 为‘)’并且使得0~i序列变为不合法,由于当前不合法状态一定是左比右少1,因此只需要改变0~i的一个')'变成‘(’就可以让0~i变为合法序列,显然我们会选择0~i中转换代价最小的。因此不妨将所有的问号都先置为')',再从左往右维护合法性,每次的选择都是保证当前0~i段合法的最小代价,当i等于len时也成立。用优先队列动态维护当前0~i段')‘的最大b-a。
/* Created Time: Saturday, November 16, 2013 PM07:23:50 CST */ #include #include #include #include using namespace std; typedef long long lld; typedef pair PII; const int N = 55555; char s ; int main() { scanf("%s",s+1); lld ss = 0; int cnt = 0; priority_queue que; for (int i = 1; s[i]; i ++) { if (s[i]=='(') cnt ++; else if (s[i]==')') cnt --; else { int a,b; scanf("%d%d",&a,&b); ss += b; cnt --; s[i] = ')'; que.push(PII(b-a,i)); } if (cnt<0) { if (que.empty()) break; PII f = que.top(); que.pop(); ss -= f.first; cnt += 2; s[f.second] = '('; } } if (cnt!=0) puts("-1"); else printf("%lld\n%s\n",ss,s+1); return 0; }
相关文章推荐
- Codeforces 3D Least Cost Bracket Sequence(贪心)
- Codeforces 3D Least Cost Bracket Sequence 贪心
- codeforces 3D . Least Cost Bracket Sequence 贪心
- Codeforces 3D Least Cost Bracket Sequence [贪心]
- CodeForces 3D Least Cost Bracket Sequence (贪心+优先队列)
- CodeForces 3D Least Cost Bracket Sequence (贪心+优先队列)
- Codeforces 3D Least Cost Bracket Sequence --- 贪心
- Codeforces 3D Least Cost Bracket Sequence
- CodeForces 3 D.Least Cost Bracket Sequence(贪心+优先队列)
- codeforce 3D. Least Cost Bracket Sequence(贪心)
- CodeForces 3D Least Cost Bracket Sequence
- CodeForces 3D-Least Cost Bracket Sequence
- Codeforces 3D Least Cost Bracket Sequence
- Codeforces 3D. Least Cost Bracket Sequence
- codeforces 3D Least Cost Bracket Sequence
- Codeforces:Least Cost Bracket Sequence
- CF 3D Least Cost Bracket Sequence
- Codeforces Beta Round #3 D. Least Cost Bracket Sequence 贪心 优先队列
- CF_3D_LeastCostBracketSequence
- D. Least Cost Bracket Sequence (贪心)