zoukankan      html  css  js  c++  java
  • bzoj1068

    题意:

    给你一个未压缩串,要求你把它压缩

    问你压缩后最小长度

    题解:

    区间dp

    怎么少就怎么来

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    char s[100];
    int f[60][60][2],mark[60][60][2];
    int same(int a,int b)
    {
        int l=b-a+1;
        if (l&1)return 0;
        for (int i=a;i<=(a+b)/2;i++)
         if (s[i]!=s[i+l/2])return 0;
        return 1;
    }
    int dp(int a,int b,int t)
    {
        int tmp=b-a+1;
        if (tmp==1)return 1;
        if (mark[a][b][t])return f[a][b][t];
        mark[a][b][t]=1;
        if (t)
         for(int i=a;i<b;i++)tmp=min(tmp,dp(a,i,1)+dp(i+1,b,1)+1);
        for (int i=a;i<b;i++)tmp=min(tmp,dp(a,i,t)+b-i);
         if (same(a,b))tmp=min(tmp,dp(a,(a+b)/2,0)+1);
        return f[a][b][t]=tmp;
    }
    int main()
    {
        scanf("%s",s+1);
        int l=strlen(s+1);
        printf("%d",dp(1,l,1));
        return 0;
    }
  • 相关阅读:
    46. 全排列
    90. 子集 II
    289. 生命游戏
    844. 比较含退格的字符串
    1266. 访问所有点的最小时间
    707. 设计链表
    DOM 关于dom的
    插件库
    浏览器判断
    FTP 客户端安装
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/8446707.html
Copyright © 2011-2022 走看看