本題的思路很簡單,區間dp即可,但做題不是為了ac,故我在此分享3種有細微差別但思路相同的做
法,以便後續遇到同型別題來選擇適合自己的方法。
直接讀入字串,列舉的區間長度不包括起點
#include#include#include#include#define inf 0x3f3f3f3f
using namespace std;
const int maxn=1e3+50;
char s[maxn];
int m[maxn];
int dp[maxn][maxn];
bool check(char s,int n,int len){
for(int i=len;i將字串從下標1開始讀入,列舉區間包含當前起點;
#include#include#include#include#define inf 0x3f3f3f3f
using namespace std;
const int maxn=1e3+50;
char s[maxn];
int m[maxn];
int dp[maxn][maxn];
bool check(char s,int n,int len){
for(int i=len;i字串從下標1讀入,列舉區間不包含當前起點。
#include#include#include#include#define inf 0x3f3f3f3f
using namespace std;
const int maxn=1e3+50;
char s[maxn];
int m[maxn];
int dp[maxn][maxn];
bool check(char s,int n,int len){
for(int i=len;i這3種做法只有細微的差別,但為什麼要做,還是值得思考一下
的。這有便於我們更好的理解區間dp;
完結撒花
洛谷P4302 字串摺疊
摺疊的定義如下 乙個字串可以看成它自身的摺疊。記作 s s x s 是x x 1 個s連線在一起的串的摺疊。記作 x s ssss s x個s 如果a a b b 則ab a b 例如,因為3 a aaa,2 b bb,所以3 a c2 b aaacbb,而2 3 a c 2 b aaacaaacb...
dp 洛谷P1133 教主的花園
一開始題目看錯了,以為很水的 然後0 爆蛋之後開始想標算 想了半天就是不知道怎麼處理這個環 設f i j k 表示第i行第j列的答案 k 0表示前面比他小 k 1表示前面比他大 但是這樣我們第一位要靠第n位來更新 那我們直接不更新第一位 從第二位來,然後跑完後把n位和1位結合一下就好了 includ...
dp 洛谷P1281 書的複製
本來以為水題,後來炸了 dp方程這個直接想總不難把 毫無優化的暴力轉移 但是最後輸出方案的時候,不可以按照dp的方案輸出的 因為dp它的方案是讓子節點數值最優 這樣的方案是是不可以保證總的方案最優的 所以要最後貪心輸出答案 就是後面的人經可能的取 include define ll long lon...