青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

ACM PKU 1411 Brackets Sequence 動態規劃

http://acm.pku.edu.cn/JudgeOnline/problem?id=1141

根據劉汝佳的推薦,這道題是“簡單”的動態規劃,卻用了我兩個多小時的時間……
還是不熟悉啊 ,呵呵 時間主要浪費在第一個思路上。

兩個思路;

思路一:
int num[i][j]表示第i個字符到第j個字符需要添加的最少字符數。string after[i][j]表示操作后,第i個字符到第j個字符按照最優方案添加括號后的串。
輸出after[0][len-1]
#include"stdio.h"
#include
"string.h"

char *after[100][100];
int  num[100][100];
char *str=new char[100];
int len;


char * str_bin(char* str1, char* str2) //合并字符串的函數 

int n = strlen(str1)+strlen(str2); 
char* str = new char[n+1]; 
int i = 0
while ( *str1 && *str2) 

if (*str1 < *str2) 
str[i
++= *str1++
else 
str[i
++= *str2++
}
 

if (*str1) 
while (str[i++= *str1++); 
else 
while (str[i++= *str2++); 

return str; 
}
 

void dp()
{
    
int i,j,k,z;
    
for(i=len-1;i>=0;i--)
      
for(j=i;j<=len-1;j++)
        
{
          num[i][j]
=32767;
          after[i][j]
=new char[100];
          after[i][j]
="";
      }
                            //初始化

     
    
for(i=len-1;i>=0;i--)
      
for(j=i;j<=len-1;j++)
      
{
       
if(i==j)
       
{
           num[i][j]
=1;
           
if(str[i]=='(') after[i][j]="()";
           
if(str[i]==')') after[i][j]="()";
           
if(str[i]=='[') after[i][j]="[]";
           
if(str[i]==']') after[i][j]="[]";
       }

       
else
       
{
          
               
if(str[i]=='('&&str[j]==')')          
                 
if(num[i+1][j-1]<num[i][j])
                 
{
                  num[i][j]
=num[i+1][j-1];
                  after[i][j]
='('+after[i+1][j-1]+')';
                 }

                 
else if(str[i]=='['&&str[j]==']')          
                 
if(num[i+1][j-1]<num[i][j])
                 
{
                  num[i][j]
=num[i+1][j-1];
                  after[i][j]
='['+after[i+1][j-1]+']';
                 }
              
           
              
for(k=i;k<j;k++)
                  
if(num[i][k]+num[k+1][j]<num[i][j])
          
//     if(strlen(after[i][j])>strlen(after[i][k])+strlen(after[k+1][j]) )
               {
                   num[i][j]
=num[i][k]+num[k+1][j];
                   after[i][j]
=str_bin(after[i][k],after[k+1][j]);
    
               }


       }


      }


    


}


void main()
{
    
while (scanf("%s", str) != EOF)
    
{
    len
=strlen(str);
    dp();
    printf(
"%s\n",after[0][len-1]);
    }


}

總是WA,連Sample Input里的數據都通不過。而且我char *after[][]是三維數組,太不方便了,代碼看起來很亂,很不爽。
想起學C語言時候,判斷括號匹配時用的是遞歸。那能不能在查找匹配時也用遞歸呢? 于是有了思路二。
     

思路二:
    int opt[i,j]表示第i個字符到第j個字符需要添加的最少字符數,狀態轉移方程: a[i,j]=min(a[i,k]+a[k+1,j]) 
    
#include "string.h"
#include 
"stdio.h"
char str[128];
int opt[110][110],tag[110][110]; //tag記錄能否str[st]和str[end]中劃分子問題,用opt[i][j]表示從str[st]到str[end]所需要插入的最小字符數

void search(int st,int end)
{
 
if(st>end) return;
 
else if(st==end){         //如果剩下最后一個字符,為之配對
  if(str[st]=='('||str[st]==')')
   printf(
"()");
  
else printf("[]");
 }

   
else{
       
if(tag[st][end]==-1){  //如果str[st]和str[end]配對(tag==-1),打印str[st]和str[end],繼續搜索str[st+1]和str[end-1]
   if(str[st]=='('){
    printf(
"(");
    search(st
+1,end-1);
    printf(
")");
   }
else{
    printf(
"[");
    search(st
+1,end-1);
    printf(
"]");
   }

  }

       
else{                //如果str[st]和str[end]不配對(tag!=-1),搜索從tag分開的兩個子問題
   search(st,tag[st][end]);
   search(tag[st][end]
+1,end);
  }

 }

}



void main()
{
 
int len,i,interval,j,k,s,tmp;
 
while(scanf("%s",str)!=EOF)
 
{
  len
=strlen(str);
  
for(i=0;i<len;i++)opt[i][i]=1;                            //初始化,
  for(interval=1;interval<len;interval++)                   //從間隔1個字母到間隔len-1個字母分別計算tag
   for(i=0;i+interval<len;i++
   
{
    j
=i+interval;
    tmp
=32767;
    
if(str[i]=='('&&str[j]==')'||str[i]=='['&&str[j]==']')  //如果str[i]和str[j]可以配對,問題轉化為求str[i+1][j-1]的tag
     tmp=opt[i+1][j-1];
    tag[i][j]
=-1;
    
for(k=i;k<j;k++)
    
{
     
if(tmp>opt[i][k]+opt[k+1][j])
     
{
         tmp
=opt[i][k]+opt[k+1][j];
         tag[i][j]
=k;
     }

    opt[i][j]
=tmp;
    }

   }

  search(
0,len-1);
  printf(
"\n");
 }

 
return;
}

posted on 2007-09-18 03:02 流牛ζ木馬 閱讀(1326) 評論(2)  編輯 收藏 引用

評論

# re: ACM PKU 1411 Brackets Sequence 動態規劃 2007-11-24 13:40 大隱于市

汗,老大的題號寫錯了吧。。。這題是1141,而不是1411。。  回復  更多評論   

# re: ACM PKU 1411 Brackets Sequence 動態規劃 2009-09-17 23:33 solofancy

第二個WA吧  回復  更多評論   

<2007年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導航

統計

公告

MY Email/MSN :mars1021@163.com QQ : 27402040 流牛ζ木馬

常用鏈接

留言簿(6)

隨筆檔案

相冊

搜索

最新隨筆

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品国产99精品国产亚洲性色 | 亚洲黄色尤物视频| 欧美综合国产| 久久综合伊人77777麻豆| 国产精品99一区二区| 久久黄色影院| 国产精品日韩专区| 91久久在线观看| 国内精品伊人久久久久av影院| 久久综合精品国产一区二区三区| 亚洲精品日韩激情在线电影| 久久精品亚洲精品| 久久久国产亚洲精品| 久久久91精品国产一区二区三区| 欧美制服丝袜| 欧美国产精品久久| 亚洲毛片在线看| 亚洲一区国产一区| 欧美在线视频播放| 久久视频一区| 欧美91视频| 国产精品白丝黑袜喷水久久久| 国产精品国产成人国产三级| 国产午夜精品美女视频明星a级 | 欧美一区二区免费观在线| 久久国产一区| 一本久久精品一区二区| 久久久久.com| 国产亚洲精品成人av久久ww| 一区二区不卡在线视频 午夜欧美不卡在 | 一区二区三区波多野结衣在线观看| 亚洲欧美日韩在线| 美女免费视频一区| 国产午夜精品视频| 亚洲欧美福利一区二区| 亚洲精品老司机| 美女日韩在线中文字幕| 国产一区二区三区四区在线观看| 99精品视频免费全部在线| 久久久久久电影| 午夜久久电影网| 国产精品久久久久久久免费软件 | 欧美激情第二页| 在线免费观看视频一区| 久久一区激情| 麻豆亚洲精品| 一区二区冒白浆视频| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 日韩亚洲欧美一区二区三区| 欧美一级播放| 久久xxxx精品视频| 好吊妞**欧美| 亚洲日本乱码在线观看| 欧美成人蜜桃| 性色av一区二区三区红粉影视| 亚洲永久精品国产| 校园春色国产精品| 亚洲第一精品在线| 在线性视频日韩欧美| 国产日韩专区| 亚洲精品久久久久久一区二区| 欧美亚韩一区| 欧美国产亚洲视频| 国产日韩欧美精品一区| 亚洲黄色尤物视频| 一区二区在线观看视频| 一本大道久久a久久精二百| 国产精品三级视频| 亚洲精品在线观| 影音先锋日韩精品| 欧美一级片在线播放| 在线亚洲免费视频| 欧美精品日日鲁夜夜添| 暖暖成人免费视频| 国产日韩专区| 久久国产色av| 免费91麻豆精品国产自产在线观看| 欧美日韩精品免费在线观看视频| 蜜桃av一区二区三区| 亚洲成色999久久网站| 久久精品国产91精品亚洲| 欧美在线免费观看亚洲| 国产日韩欧美在线观看| 久久国产直播| 欧美国产综合视频| 一本色道久久综合亚洲精品不| 欧美片在线观看| 亚洲一区二区av电影| 欧美在现视频| 亚洲七七久久综合桃花剧情介绍| 免费看亚洲片| 一区二区不卡在线视频 午夜欧美不卡在 | 国产自产精品| 老司机精品视频一区二区三区| 久久久人成影片一区二区三区| 一区免费视频| 欧美视频免费| 久久嫩草精品久久久久| 日韩一级免费| 久久久久久久久蜜桃| 最新亚洲激情| 一区二区三区在线观看国产| 欧美特黄一区| 欧美成人在线免费视频| 午夜性色一区二区三区免费视频| 欧美美女bb生活片| 亚洲在线电影| 亚洲精华国产欧美| 欧美插天视频在线播放| 欧美在线视频一区二区| 亚洲男人的天堂在线| 在线亚洲欧美专区二区| 亚洲精品国产精品国自产在线 | 一区二区三区在线视频观看| 欧美日一区二区在线观看| 欧美大片专区| 欧美精品国产精品日韩精品| 裸体丰满少妇做受久久99精品| 亚洲欧美日韩综合国产aⅴ| 一区二区av| 亚洲中字黄色| 亚洲欧美中文日韩v在线观看| 一本色道久久综合亚洲精品不 | 亚洲国产乱码最新视频| 欧美电影免费观看| 在线观看久久av| 久久综合影音| 看欧美日韩国产| 91久久国产综合久久| 欧美综合国产精品久久丁香| 一区二区三区四区国产| 欧美国产亚洲视频| 性色av一区二区三区在线观看| 欧美日韩另类视频| 麻豆久久婷婷| 尤物yw午夜国产精品视频明星| 欧美午夜精品久久久久久孕妇| 欧美日韩免费一区二区三区视频 | 欧美搞黄网站| 欧美一区二粉嫩精品国产一线天| 在线观看一区二区精品视频| 国产日韩欧美二区| 国内精品久久久| 一本久道久久久| 久久黄色级2电影| 亚洲国产精品精华液2区45| 99国产精品自拍| 久久精品系列| 欧美亚州一区二区三区| 伊人久久成人| 欧美在线视频一区二区三区| 欧美 日韩 国产 一区| 欧美日韩999| 欧美在线观看网址综合| 亚洲午夜一二三区视频| 欧美综合二区| 亚洲欧美日韩视频二区| 欧美精品在线免费观看| 91久久久在线| 亚洲国产99| 欧美成人精品一区| 亚洲日产国产精品| 亚洲电影免费观看高清| 久久一综合视频| 国语自产精品视频在线看一大j8 | 亚洲午夜电影| 国产伦精品一区二区三区照片91 | 美女脱光内衣内裤视频久久网站| 国产精品毛片一区二区三区 | 男人的天堂亚洲在线| 亚洲电影在线播放| 亚洲国产欧美国产综合一区| 欧美日韩精品是欧美日韩精品| 亚洲六月丁香色婷婷综合久久| 亚洲国产精品悠悠久久琪琪| 欧美小视频在线| 巨乳诱惑日韩免费av| 国产精品国产三级国产aⅴ9色| 欧美亚洲一级片| 美女视频一区免费观看| 午夜精品免费视频| 免费91麻豆精品国产自产在线观看| 亚洲美女91| 久久爱91午夜羞羞| 欧美亚洲综合在线| 欧美日韩亚洲高清| 欧美成人在线免费视频| 国产精品美女黄网| 欧美电影打屁股sp| 国产亚洲精品福利| 亚洲视频香蕉人妖| 美腿丝袜亚洲色图| 久久狠狠亚洲综合| 国产精品永久免费观看| 一区二区三区视频在线看| 亚洲一二区在线| 国产精品99一区| 亚洲图片欧美一区| 亚洲专区在线| 国产精品国产三级国产aⅴ入口 |