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 |
Re:求助 记忆化搜索怎么构造最优解啊..In Reply To:求助 记忆化搜索怎么构造最优解啊.. Posted by:uncleD at 2008-03-30 13:49:37 > 刚刚开始用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( > > 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