![[bzoj1068]压缩[区间动规] [bzoj1068]压缩[区间动规]](https://image.shishitao.com:8440/aHR0cHM6Ly9ia3FzaW1nLmlrYWZhbi5jb20vdXBsb2FkL2NoYXRncHQtcy5wbmc%2FIQ%3D%3D.png?!?w=700&webp=1)
看了lujiaxin的blog,感觉自己好浪啊。。。。好难过
刷题的时候不够投入,每种算法都是只写一两道就过去了,这样怎么可能进步嘛
不要总是抱怨时间太少了 都是自己不努力>_<
好啦 看题
n<=50的范围,记忆化。。。N^3
f[a][b][t]表示a~b这段区间内,有没有M的最短答案。
枚举断点(很重要的思想),当T==1,显然左边右边都dp一下;(think clearly)
然后,看看左边能不能被压缩,这一句很重要,因为如果区间内没有M的话,它只能是最左边复制呀复制,所以可以保证正确性;
标算思路好严谨啊,感觉自己DP能力还要多学习
PS.submit的时候看到别人在做3110,代码真心很短的树套树,好想写啊~
月考加油啦~\(≧▽≦)/~
#include<cstdio> #include<algorithm> #include<cstring> ];][][],mark[][][]; using namespace std; bool same(int a,int b) { ;==); ;i++) ]); ; } int dp(int a,int b,int t) { ,l=b-a+;); ; ))+dp(i+,b,)+); for(int i=a;i<b;i++)tmp=min(tmp,dp(a,i,t)+b-i); ,)+); f[a][b][t]=tmp;return tmp; } int main() { scanf(); ); printf(,len,)); }