zoukankan      html  css  js  c++  java
  • BZOJ1090: [SCOI2003]字符串折叠

    区间dp.

    一种是分段dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);

    一种是这一段可以缩写dp[i][j]=min(dp[i][j],dp[i][l]+2+calc((j-i+1)/(l-i+1)));

    calc表示计算十进制的位数

    边界就是l==r f[l][r]=1

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int read(){
     4   int x=0,f=1;char ch=getchar();
     5   while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
     6   while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
     7   return x*f;
     8 }
     9 char s[120];
    10 int f[120][120];
    11 #define inf 1e9
    12 bool judge(int l,int k,int r){
    13   int tmp=0;
    14   for(int i=k+1;i<=r;i++){
    15     if(s[l+tmp]!=s[i])return 0;
    16     tmp=tmp+1%(k-l+1);
    17   }
    18   return 1;
    19 }
    20 int calc(int x){
    21   int tmp=0;
    22   while(x){
    23     tmp++;x/=10;
    24   }
    25   return tmp;
    26 }
    27 int dp(int l,int r){
    28   if(l==r)return 1;
    29   if(f[l][r])return f[l][r];
    30   int t=r-l+1;
    31   for(int k=l;k<r;k++)t=min(t,dp(l,k)+dp(k+1,r));
    32   for(int k=l;k<r;k++)if((r-l+1)%(k-l+1)==0&&judge(l,k,r))t=min(t,2+dp(l,k)+calc((r-l+1)/(k-l+1)));
    33   return f[l][r]=t;
    34 }
    35 int main(){
    36   scanf("%s",s);
    37   int l=strlen(s);
    38   printf("%d
    ",dp(0,l-1));
    39   return 0;
    40 }
    41 
    View Code

    1090: [SCOI2003]字符串折叠

    Time Limit: 10 Sec  Memory Limit: 162 MB
    Submit: 1046  Solved: 680
    [Submit][Status][Discuss]

    Description

    折叠的定义如下: 1. 一个字符串可以看成它自身的折叠。记作S  S 2. X(S)是X(X>1)个S连接在一起的串的折叠。记作X(S)  SSSS…S(X个S)。 3. 如果A  A’, BB’,则AB  A’B’ 例如,因为3(A) = AAA, 2(B) = BB,所以3(A)C2(B)  AAACBB,而2(3(A)C)2(B)AAACAAACBB 给一个字符串,求它的最短折叠。例如AAAAAAAAAABABABCCD的最短折叠为:9(A)3(AB)CCD。

    Input

    仅一行,即字符串S,长度保证不超过100。

    Output

    仅一行,即最短的折叠长度。

    Sample Input

    NEERCYESYESYESNEERCYESYESYES

    Sample Output

    14

    HINT

    一个最短的折叠为:2(NEERC3(YES))

  • 相关阅读:
    juniper ALARM亮红灯
    笔记本设置wifi热点
    基于apache+php+mysql 编译安装详解(转载)
    CentOS6.X 安装MySQL 5.X
    spring 多数据源切换
    Java Reflection(十二):动态类加载与重载
    Java Reflection(十一):动态代理
    Java Reflection(十):数组
    Java Reflection(九):泛型
    Java Reflection(八):注解
  • 原文地址:https://www.cnblogs.com/wjyi/p/5612295.html
Copyright © 2011-2022 走看看