##区间dp##
来源:互联网 发布:画立体图的软件 编辑:程序博客网 时间:2024/05/16 11:05
区间dp
dp[N][N]([…]),记忆化搜索
由于dp[i][j] 转移往往需要枚举k,通常是O(N^3),N不超过200
当然也有不需要枚举的O(N^2)
Light oj 1422
【题意】有个人要参加好多场舞会,需要穿的类型依次为a[i],可以在衣服外套衣服,可以不换衣服(前提是类型满足),但衣服一旦脱了就穿不上了,求最少需要几件衣服(类型不限,想要什么有什么)。
【Sol】 三种转移方式及其条件
dp[i][j]= dp[i][j-1] (arr[i] == arr[j])dp[i][j]= min{dp[i][k]+dp[k+1][j]} (arr[i] == arr[k] && i <= k <= j)dp[i][j]= dp[i+1][j]+1//边界dp[i][i]=1
或者
dp[i][j]= min{dp[i][k]+dp[k+1][j]} (arr[i] == arr[k] && i < k <= j)dp[i][j]= dp[i+1][j]+1//边界dp[i][i]=1dp[i][j]=0 (i>j)
Cf 149D
【题意】给一个合法的括号序列(N<700),要求每对匹配括号有且只有一个涂色(红或蓝选一种),并要求不能出现连续的蓝或红。
【Sol】有点类似数位dp。
LL f(int a,int b,int l,int r){ if (a>=b) return 1; if (dp[a][b][l][r]!=-1) return dp[a][b][l][r]; LL tmp=0; /*a染R*/ if (l!=1)tmp+=f(a+1,t[a]-1,1,0)*f(t[a]+1,b,0,r)%e; /*a染B*/ if (l!=2)tmp+=f(a+1,t[a]-1,2,0)*f(t[a]+1,b,0,r)%e; /*t[a]染R*/ if (r!=1||t[a]!=b) tmp+=f(a+1,t[a]-1,0,1)*f(t[a]+1,b,1,r)%e; /*t[a]染B*/ if (r!=2||t[a]!=b) tmp+=f(a+1,t[a]-1,0,2)*f(t[a]+1,b,2,r)%e; tmp%=e; return dp[a][b][l][r]=tmp;}
ZOJ 3469
【题意】有n个人叫餐,每个人都在x轴上的xi位置,并且每个人都有个bi。现在送餐员从x轴上的某点出发,带上所有餐,求sum{bi*ti}(1<=i<=n)的最小值
【Sol】
1.当前送完餐的部分一定是含restaurant的连续的一段
2.必须把对后面的影响考虑在当前状态下,若当前转移用时t,后面还有x人,当前的状态就要多加这x人的bi值的和乘上t
f[a][b][0]//a~b这一段已送完餐,最后停在af[a][b][1]//a~b这一段已送完餐,最后停在b//边界如下,转移略int f(int a,int b,int st){ if (a==b&&a!=res) return inf; if (a==b&&a==res) return 0; //……}
Hdu 4283
【题意】与上题类似,去掉上题的xi,送餐(此题是上台)的顺序必须是原顺序的一个合法的出栈序列
【Sol】合法的出栈序列中有一个很重要的性质:[a,b]这是一开始的所有元素,当a第k个出栈时[a+1,a+k-1]肯定比1先出栈,[a+k,b]肯定比a后出栈.。这样一个区间划分成两个子区间[a+1,a+k-1],[a+k,b]。
然后把对后面的影响考虑在当前状态下就可以了。
Hdu 2476
【题意】用刷子每次可以刷一段任意字母,问把串s1刷成同样长度的s2需要的最少步(n<=100)
【sol】假设原来全是数字(对任意i,s1[i]!=s2[i]),是否就是lightoj 1422?//假设字符串从1开始存ans[i]=ans[i-1]; (s1[i]==s2[i]) =min{ans[j]+f(j+1,i)} (s1[i]!=s2[i],0<=j<i)
SDUT 1309
【sol】环的处理:拆成2*n的链,求答案时for循环求最小值
for (int i=1;i<=n;i++) scanf("%d",&t[i]); for (int i=1;i<=n-1;i++) t[i+n]=t[i]; //………… int ans=0x3f3f3f3f; for (int i=1;i<=n;i++) ans=min(ans,f(i,i+n-1));
- 区间DP
- 区间DP
- 区间DP
- 区间DP
- ##区间dp##
- 区间dp
- 区间DP
- 区间dp
- 区间dp
- 区间dp
- 区间dp
- 区间dp
- 区间dp
- 区间dp
- 区间DP
- 区间DP
- 区间DP
- 区间dp
- hdoj2009解题报告
- C/C++中的qsort()函数及其cmp()
- halcon模板匹配之形状匹配法
- dba_extents提示未选定行解决
- Oracle Nologging and Append 及锁介绍
- ##区间dp##
- python 的内存管理
- ip flow-exporttemplate timeout-rate & cache timeout parameters
- 程序员的效率器---windows快捷键
- windows使用笔记
- jsoncpp的安全使用
- 系统辨识 system identification
- oracle11g客户端配置及使用(Windows系统)
- 用JS实现类似淘宝购物图片切换