标签:desc not table array pos div tput 插入 void
Time Limit: 1000MS | Memory Limit: 65536K | |||
Total Submissions: 23638 | Accepted: 6665 | Special Judge |
Description
Input
Output
Sample Input
([(]
Sample Output
()[()]
题目分析:
显然题目是要求我们为一个输入序列添加最少的“[”或者“(”等符号来使之可以配对。要配对的办法肯定有很多种,我们检测到每一个括号都给他配对,那么最终多出了一倍的符号,这样肯定是配对的但是不符合最少的。因此我们采用一个区间DP的方法。pos[i][j]表示第i个和第j个字符之间的需要隔开的位置,若是匹配的则为-1,dp[i][j]表示第i个和第j个字符之间需要添加的字符数。具体见如下Java代码注释。
1 import java.util.*; 2 public class BracketsSequence1141 { 3 private static char s[]=new char[105];//接受控制台的输入。 4 private int len;//输入字符串的长度 5 private int dp[][]=new int[105][105];//dp[i][j],从i到j需要插入的最小字符数 6 private int pos[][]=new int[105][105];//pos[i][j],字符i与j是否匹配,若是则为-1,若不是则记录隔开的位置 7 private void print(int i,int j){ 8 //输出结果 9 if(i>j) 10 return; 11 if(i==j){ 12 if(s[i]==‘(‘||s[i]==‘)‘) 13 System.out.print("()"); 14 else 15 System.out.print("[]"); 16 } 17 else{ 18 if(pos[i][j]==-1){//如果字符是匹配的 19 System.out.print(s[i]); 20 print(i+1,j-1); 21 System.out.print(s[j]); 22 } 23 else{//字符不匹配 24 print(i,pos[i][j]); 25 print(pos[i][j]+1,j); 26 } 27 } 28 }; 29 private void getDP(){ 30 int inf=0x7fffffff; 31 int i,j,k,mid; 32 int len=s.length; 33 for(i=0;i<len;i++){ 34 for(j=0;j<len;j++){ 35 dp[i][j]=0; 36 } 37 dp[i][i]=1; 38 } 39 for(k=1;k<len;k++){ 40 for(i=0;i+k<len;i++){ 41 j=i+k;//表示不断地分隔,比较不同字符之间是否匹配 42 dp[i][j]=inf;//表示目前不可匹配 43 if((s[i]==‘(‘&&s[j]==‘)‘)||(s[i]==‘[‘&&s[j]==‘]‘)){ 44 //表示字符配对 45 dp[i][j]=dp[i+1][j-1]; 46 pos[i][j]=-1; 47 } 48 //若字符不配对或者其他,表示寻找更少的配对数 49 for(mid=i;mid<j;mid++){ 50 if(dp[i][j]>dp[i][mid]+dp[mid+1][j]){ 51 dp[i][j]=dp[i][mid]+dp[mid+1][j]; 52 pos[i][j]=mid; 53 } 54 } 55 } 56 } 57 } 58 public static void main(String[] args){ 59 Scanner sc = new Scanner(System.in); 60 //String temp=null; 61 BracketsSequence1141 A=new BracketsSequence1141(); 62 s=sc.nextLine().toCharArray(); 63 if(s.length==0){ 64 System.out.println(); 65 } 66 else{ 67 A.getDP(); 68 A.print(0,s.length-1); 69 } 70 } 71 }
标签:desc not table array pos div tput 插入 void
原文地址:http://www.cnblogs.com/1996313xjf/p/6617639.html