zoukankan      html  css  js  c++  java
  • poj 2176Folding解题报告

    现在在poj上做题,总是要看解题报告,特别是自己没做过的类型,实在是受不了,只能说自己做的题太少了,还不能熟练,这个也是区间dp,这几道区间dp都要求输出最后的结果,必须进行记录,确实麻烦很多

    View Code
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #define N 110
     5 #define inf 0x7fffffff
     6 using namespace std;
     7 char str[N];
     8 struct node
     9 {
    10     int num;
    11     char s[N];
    12 }dp[N][N];
    13 int pos;
    14 char ts[N];
    15 void Int2S(int num)
    16 {
    17     int i,j;
    18     pos=-1;
    19     char cc;
    20     while(num)
    21     {
    22         ts[++pos]=(num%10)+'0';
    23         num/=10;
    24     }
    25     for(j=0;j<=pos/2;j++)
    26     {
    27         cc=ts[j];
    28         ts[j]=ts[pos-j];
    29         ts[pos-j]=cc;
    30     }
    31 }
    32 int main()
    33 {
    34     int i,j,k,len,p,q,f,nt,t;
    35     scanf("%s",str);
    36     len=strlen(str);
    37     for(i=0;i<len;i++)
    38     {
    39         dp[i][i].s[0]=str[i];
    40         dp[i][i].s[1]='\0';
    41         dp[i][i].num=1;
    42     }
    43     for(p=1;p<len;p++)
    44     for(i=0;i<len-p;i++)
    45     {
    46         j=i+p;
    47         dp[i][j].num=inf;
    48         for(k=1;k<p;k++)
    49         {
    50             if((p+1)%k)
    51             continue;
    52             q=i+k,t=i;
    53             while(q<=j)
    54             {
    55                 if(str[q]!=str[t])
    56                 break;
    57                 q++;
    58                 t++;
    59                 if(t==i+k)
    60                 t=i;
    61             }
    62             if(q>j)
    63             {
    64                 nt=(p+1)/k;
    65                 Int2S(nt);
    66                 strcpy(dp[i][j].s,ts);
    67                 dp[i][j].s[++pos]='(';
    68                 for(t=0;dp[i][i+k-1].s[t];t++)
    69                 dp[i][j].s[++pos]=dp[i][i+k-1].s[t];
    70                 dp[i][j].s[++pos]=')';
    71                 dp[i][j].num=pos+1;
    72                 dp[i][j].s[++pos]='\0';
    73                 break;
    74             }
    75         }
    76         for(k=i;k<j;k++)
    77         {
    78             if(dp[i][j].num>dp[i][k].num+dp[k+1][j].num)
    79             {
    80                 dp[i][j].num=dp[i][k].num+dp[k+1][j].num;
    81                 strcpy(dp[i][j].s,dp[i][k].s);
    82                 strcat(dp[i][j].s,dp[k+1][j].s);
    83             }
    84         }
    85     }
    86     printf("%s\n",dp[0][len-1].s);
    87     return 0;
    88 }
  • 相关阅读:
    C#入门经典中的SelectionFont属性为null
    C#键盘事件处理
    C# TextBox中的Validating与Validated事件[转]
    System.Diagnostics.Process 执行.EXE
    USB HID usage table
    ADPCM编码和解码
    Load$$ execution region symbols
    Astyle编程语言格式化工具的说明
    RLE行程长度编码压缩算法
    Django文档阅读之执行原始SQL查询
  • 原文地址:https://www.cnblogs.com/caozhenhai/p/2537504.html
Copyright © 2011-2022 走看看