前言
又强行凑了一波...
今天我们来讲区间和状压
区间DP的水题
已经不打算写任何概论了XD
(1)压缩(SCOI2007)
题面见链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1068
对于每一个区间(l,r)我们都可以进行如下操作:
如果这个区间可以在i处被分成两段进行压缩,那么我们更新的结果就是f[l][i]+f[i+1][r]+1(1为M)
反之,则只压缩其中一段
如果该区间有两个完全相同的字符串,则直接合并一个串为R
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<cctype>
#include<iomanip>
using namespace std;
inline int read(){
int i=0,f=1;
char ch;
for(ch=getchar();!isdigit(ch);ch=getchar())
if(ch=='-') f=-1;
for(;isdigit(ch);ch=getchar())
i=(i<<3)+(i<<1)+(ch^48);
return i*f;
}
int buf[1024];
inline void write(int x){
if(!x){putchar('0');return ;}
if(x<0){putchar('-');x=-x;}
while(x){buf[++buf[0]]=x%10,x/=10;}
while(buf[0]) putchar(buf[buf[0]--]+48);
return ;
}
#define stan 111
char a[stan];
int f[stan][stan][stan],len;
bool check(int l,int r){
int sze=r-l+1;
if(sze&1) return false;
for(int i&