【题解】剪纸条(dp)

【题解】剪纸条(dp)

HRBUST - 1828

网上搜不到题解?那我就来写一篇吧哈哈哈

最优化问题先考虑\(dp\),设\(dp(i)\)表示将前\(i\)个字符(包括\(i\))分割成不相交的回文子串的最小数目

直接模拟题意转移即可。初始化写在里面了,\(dp(i)=i\)
\[
dp(i)=\min\{i,dp(j-1)\}
\]
其中\(S[j\dots i]\)是一个回文串,\(O(n^2)\)预处理回文串即可,注意偶回文串和奇回文串。

刚开始想太多,这道题。以后遇最优化的题一定要花有一定量的时间设计DP,因为DP的操作性强,正确性也比较好验证,即使后面有其他的解法,DP也可以作为对拍的保障。

//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;
const int maxn=1e2+5;
char c[maxn];
int dp[maxn],in[maxn][maxn],n;

int main(){
      c[0]='_';
      while(~scanf("%s",c+1)){
        n=strlen(c+1);
        for(register int t=1;t<=n;++t)
          for(register int i=1;i<=n;++i)
            in[t][i]=0;
        for(register int t=1;t<=n;++t){
          register int p=0;
          while(c[t-p]==c[t+p]) in[t-p][t+p]=1,++p;
          p=0;
          while(c[t-p]==c[t+1+p]) in[t-p][t+1+p]=1,++p;
          dp[t]=t;
        }
        for(register int t=1;t<=n;++t)
          for(register int i=1;i<=t;++i)
            if(in[i][t])
                  dp[t]=min(dp[t],dp[i-1]+1);
        printf("%d\n",dp[n]-1);
      }
      return 0;
}

原文地址:https://www.cnblogs.com/winlere/p/11414572.html

时间: 2024-11-05 13:39:58

【题解】剪纸条(dp)的相关文章

【好好补题,因为没准题目还会再出第三遍!!】ACM字符串-组合数学(官方题解是数位DP来写)

ACM字符串 1.长度不能超过n 2.字符串中仅包含大写字母 3.生成的字符串必须包含字符串“ACM”,ACM字符串要求连在一块! ok,是不是很简单?现在告诉你n的值,你来告诉我这样的字符串有多少个 输入 输入一个正整数T,代表有T组数据 接下来T行,每行一个正整数n,n<=10. 输出 输出符合条件的字符串的数目 样例输入 1 3 样例输出 1 做题过程: 熬了三四个小时,WA了无数次!最终推出了组合数的公式! 首先暴力打表,嘿嘿!这样极大地压缩计算时间! 打表如下: 一:生成连续的7位绝对

[BZOJ 1260][CQOI2007]涂色paint 题解(区间DP)

[BZOJ 1260][CQOI2007]涂色paint Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色.例如第一次把木版涂成RRRRR,第二次涂成RGGGR,第三次涂成RGBGR,达到目标. 用尽量少的涂色次数达到目标. Input 输入仅一行,包含一个长度为n的字符串,即涂色目标.字符串中的

bzoj 4899 记忆的轮廓 题解(概率dp+决策单调性优化)

题目背景 四次死亡轮回后,昴终于到达了贤者之塔,当代贤者夏乌拉一见到昴就上前抱住了昴“师傅!你终于回来了!你有着和师傅一样的魔女的余香,肯定是师傅”.众所周知,大贤者是嫉妒魔女沙提拉的老公,400年前与神龙.剑圣一起封印魔女因子暴走的莎缇拉.在魔女茶会的时候,莎缇拉也表示过对昴浓浓的爱意,昴便是被莎缇拉召唤来异世界的.而贤者之塔中的资料与试炼,似乎都指向同一种可能性……记忆的轮廓,逐渐显形…… 题目描述 通往贤者之塔的路上,有许多的危机.我们可以把这个地形看做是一颗树,根节点编号为1,目标节点编

[BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)

[BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列,则(A)是合法的括号序列. 3.若A,B是合法的括号序列,则AB是合法的括号序列. 我们考虑match[i]表示从左往右数第i个左括号所对应的是第几个右 括号,现在他得到了一个长度为2n的括号序列,给了你m个信息,第i 个信息形如ai,bi,表示match

[BZOJ 1652][USACO 06FEB]Treats for the Cows 题解(区间DP)

[BZOJ 1652][USACO 06FEB]Treats for the Cows Description FJ has purchased N (1 <= N <= 2000) yummy treats for the cows who get money for giving vast amounts of milk. FJ sells one treat per day and wants to maximize the money he receives over a given

[BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP)

[BZOJ 1879][SDOI 2009]Bill的挑战 Description Solution 1.考虑状压的方式. 方案1:如果我们把每一个字符串压起来,用一个布尔数组表示与每一个字母的匹配关系,那么空间为26^50,爆内存: 方案2:把每一个串压起来,多开一维记录匹配字符,那么空间为nlen26,合法,但不便于状态的设计和转移: 方案3:把每一个串同一个位置的字符放在一起,用一个布尔数组记录与每一个小写字母的匹配关系,那么空间为26^15*len,爆内存: 方案4:把每一个串同一个位置

[题解]诸侯安置(dp+组合)

题目链接:这里- 题目描述: 很久以前,有一个强大的帝国,它的国土成正方形状,如图所示. 这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地(正方形中的一格).但是,这些诸侯又非常好战,当两个诸侯位于同一行或同一列时,他们就会开战.如下图2—3为n=3时的国土,阴影部分表示诸侯所处的位置.前两幅图中的诸侯可以互相攻击,第三幅则不可以. 国王自然不愿意看到他的诸侯们互相开战,致使国家动荡不安. 因此,他希望通过合理的安排诸侯所处的位置,使他们两两之间都不能攻击. 现在,给

P2014 选课 题解(树形DP)

题目链接 P2014 选课 解题思路 树形动归,用\(f[i][j]\)表示以\(i\)为根,\(j\)个子节点(不包括自己)的最大学分 首先根据题意建图,用根节点\(0\)将森林连成树. 从根节点开始\(DFS\)遍历,遍历到叶节点后回溯,回溯过程中将\(f[i][j]\)更新,利用背包的思想. \(DFS\)过程中,\(num\)为离根节点0更近的定点,遍历的\(i\)为\(num\)的子节点,容易得出递推关系式: \(f[num][j]=max\{f[num][j],f[num][j-k-

[程序员代码面试指南]递归和动态规划-排成一条线的纸牌博弈问题(DP)

题目 给定一个整型数组arr,代表数值不同的纸牌排成一条线.玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿,但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪明.请返回最后获胜者的分数. 例子 arr=[1,2,100,4]. 开始时玩家A只能拿走1或4.如果玩家A拿走1,则排列变为[2,100,4],接下来玩家B可以拿走2或4,然后继续轮到玩家A.如果开始时玩家A拿走4,则排列变为[1,2,100],接下来玩家B可以拿走1或100,然后继续轮到玩家A.玩家A作为绝顶聪

2017省夏令营Day6 【dp】

题解:区间dp,f[i][j]表示区间[i,j]的狼全部消灭的最小代价,设k为i.j间任意一点(i<=k<=j),且第k只狼被最后消灭,显然,区间总代价即可被我们划分成[i,k-1]和[k+1,j]两部分,我们可以假设他们已知,于是求得两区间代价和再加上消灭第k只狼的代价就能求得区间[i,j]的总代价. 状态转移方程:f[i][j]=f[i][k-1]+f[k+1][i]+a[k]+b[i-1]+b[j+1]. PS:注意初始化时i要从0开始枚举,且若j<i时f值为0. 代码如下: 1