| ||||||||||
| 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 | |||||||||
将中间过程保存在string类型的数组里面In Reply To:怎样才能不超时?? 谢谢! Posted by:zhb_msqx at 2007-08-18 16:51:16 我开始也是TLE后来自习看看书发现错误了。
> #include <iostream>
> #include <fstream>
> #include <string>
> using namespace std;
> 定义一个 string tmpstr[100][100];初始化为""
> char s[100];
>
> string check(const char *c,int start,int end){
> if(start>end)return "";
这里判断tmpstr[start][end]是否等于""如果不为""直接返回,避免重复计算
> if(start==end){
> if(c[start]=='('||c[start]==')')return "()";
> else return "[]";
> }
> string res="";
> int minlen=10000;
> int i=start;
> string str="";
> if(c[i]=='('){
> for(int j=i+1;j<=end;j++){
> if(c[j]==')'){
> str="("+check(c,i+1,j-1)+")"+check(c,j+1,end);
> if(str.length()<=minlen){
> minlen=str.length();
> res=str;
> }
> }
> }
> str="()"+check(c,i+1,end);
> if(str.length()<=minlen){
> minlen=str.length();
> res=str;
> }
> }else if(c[i]==')'){
> str="()"+check(c,i+1,end);
>
> if(str.length()<minlen){
>
> minlen=str.length();
> res=str;
> }
> }else if(c[i]=='['){
> for(int j=i+1;j<=end;j++){
> if(c[j]==']'){
> str="["+check(c,i+1,j-1)+"]"+check(c,j+1,end);
> if(str.length()<minlen){
> minlen=str.length();
> res=str;
> }
> }
> }
> str="[]"+check(c,i+1,end);
> if(str.length()<minlen){
> minlen=str.length();
> res=str;
> }
> }else if(c[i]==']'){
> str="[]"+check(c,i+1,end);
> if(str.length()<minlen){
> minlen=str.length();
> res=str;}
> }
这里将res保存在tmpstr里面 tmpstr[start][end]=res;
> return res;
> }
>
>
>
> void main(){
> // ifstream in("data.txt");
> cin>>s;
> string p=check(s,0,strlen(s)-1);
> cout<<p<<endl;
>
>
>
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator