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 |
求助 记忆化搜索怎么构造最优解啊..刚刚开始用dp 不太熟悉.. 不知道怎么在求解过程中构造最优解.. 这个题 我求出了最少需要加多少个括号.. 但是不知道怎么记录添加括号的位置.. 搜索函数: int checkMsg(int head,int tail)// (0,msgLen-1) { int i; int temp; int posi =-1; int ans =MAX; if(head>tail) return 0; if(head==tail) return 1; if(proCount[head][tail]!=MAX) return proCount[head][tail]; if( (oriMsg[head]=='('&&oriMsg[tail]==')')|| (oriMsg[head]=='['&&oriMsg[tail]==']') ) { if(proCount[head+1][tail-1]==MAX) proCount[head+1][tail-1] =checkMsg(head+1,tail-1); if(ans>proCount[head+1][tail-1]) ans =proCount[head+1][tail-1]; } if(oriMsg[head]=='('||oriMsg[head]=='[') { if(proCount[head+1][tail]==MAX) proCount[head+1][tail] =checkMsg(head+1,tail); if(ans>(proCount[head+1][tail]+1)) { ans =proCount[head+1][tail]+1; posi =head; } } if(oriMsg[tail]==')'||oriMsg[tail]==']') { if(proCount[head][tail-1]==MAX) proCount[head][tail-1] =checkMsg(head,tail-1); if(ans>(proCount[head][tail-1]+1)) { ans =proCount[head][tail-1]+1; posi =tail; } } for(i=head;i<tail;i++) { temp =checkMsg(head,i)+checkMsg(i+1,tail); if(ans>temp) ans =temp; } proCount[head][tail] =ans; addPosi[posi] =true; return proCount[head][tail]; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator