题目链接: Lightoj  1044 - Palindrome Partitioning 题目描述: 给一个字符串,问至少分割多少次?分割出来的子串都是回文串. 解题思路: 先把给定串的所有子串是不是回文串处理出来,然后用dp[i] 表示 从起点到串i的位置的最少分割次数,然后结合处理出来的回文串转移一下即可! 还是好蠢哦!自己竟然感觉是一个区间DP,但是n又那么大,完全不是区间DP的作风啊! #include <cmath> #include <cstdio> #include…
题目链接:http://lightoj.com/volume_showproblem.php?problem=1044 题意:求给出的字符串最少能分成多少串回文串. 一般会想到用区间dp暴力3个for但是这里的数据有1000,3个for肯定超时的. 但是这题只是判断回文串有多少个所以可以先预处理一下[i,j]是不是回文,然后 就是简单dp了 for(int i = 1 ; i <= len ; i++) { ans[i] = ans[i - 1] + 1; for(int j = i - 1 ;…
A palindrome partition is the partitioning of a string such that each separate substring is a palindrome. For example, the string "ABACABA" could be partitioned in several different ways, such as {"A","B","A","…
题目大意: 给你一个字符串,问这个字符串最少有多少个回文串. 区间DP直接搞     #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> #include<queue> #include<vector> #include<map> using namespace std; typede…
题目链接:http://lightoj.com/volume_showproblem.php?problem=1044 dp[i][j]表示i到j直接的最小回文区间个数,直接看代码 #include <bits/stdc++.h> using namespace std; ; int dp[N][N], inf = 1e9; char str[N]; bool judge(int l, int r) { , j = r - ; i < j; ++i, --j) { if(str[i] !…
https://vjudge.net/problem/POJ-3280 猛刷简单dp第一天第三题. 这个据说是[求字符串通过增减操作变成回文串的最小改动次数]的变体. 首先增减操作的实质是一样的,所以输入时求min. dp[i][j]表示第i个字符到第j个字符中修改成回文串的最小代价.由于回文串的特殊性,这里两层循环的遍历方式跟常见的略有不同 这算是回文串dp的一种典型题目典型方法吧. #include<iostream> #include<cstdio> #include<…
Description We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a regular brackets sequence, if s is a regular brackets sequence, then (s) and [s] are regular brackets sequences, and if a and b are regul…
区间dp:顾名思义就是在区间上进行动态规划,通过合并小区间求解一段区间上的最优解. 常见模板: for(int len=1;len<n;len++){//区间长度 for(int be=1;be+len<=n;be++){//起点 int en=be+len;//终点 for(int j=be;j<en;j++){//割点 dp[be][en]=min(dp[be][en],dp[be][j]+dp[j+1][en]+割点代价);(max也可以) } } } http://www.51n…
石子合并(3种变形) <1> 题目: 有N堆石子排成一排(n<=100),现要将石子有次序地合并成一堆,规定每次只能选相邻的两堆合并成一堆,并将新的一堆的石子数,记为改次合并的得分,编一程序,由文件读入堆数n及每堆石子数(<=200): (1)选择一种合并石子的方案,使得做n-1次合并,得分的总和最少: (2)选择一种合并石子的方案,使得做n-1次合并,得分的总和最多: 输入格式 第一行为石子堆数n 第二行为每堆石子数,每两个数之间用一空格分隔. 输出格式 从第1行为得分最小 第2…
题意:将一个字符串分割成最少的字符串,使得分割出的每个字符串都是回文串.输出最小的分割数. 方法(自己的):先O(n^2)(用某个点或某个空区间开始,每次向左右扩展各一个的方法)处理出所有子串是否回文.然后常规区间dp,ans[i][j]表示i到j的子串的最小划分数.如果i到j的子串本身为回文串,那么ans[i][j]为1,否则枚举所有方案将i到j划分为两个区间,取所有两个区间结果之和的最小值. 方法(其他,大概就是压了一下空间,压了一下时间的常数):http://blog.csdn.net/l…