P1005 矩阵取数游戏 区间DP。 可以看出每行互不影响,所以每次区间DP求出本行最大值,ans即加上每一行最大值。 转移方程式:f[L][R]=max(num[L]*p[k]+dp(L+1,R),dp(L,R-1)+num[R]*p[k]) #include<bits/stdc++.h> #de ...
分类:
其他好文 时间:
2019-10-05 16:50:02
阅读次数:
105
题意:有n堆石头,盘古每次可以选择连续的x堆合并,所需时间为x堆石头的数量之和,x∈[l,r],现在要求,能否将石头合并成一堆,如果能,最短时间是多少。 思路:(参考了ACM算法日常)DP[i][j][k],表示当前状态下[i,j]这个区间分成了k堆。 状态转移:1.k=1时,dp[i][j][k] ...
分类:
其他好文 时间:
2019-10-04 14:53:45
阅读次数:
95
POI2015 LAS 环状dp,状态为第i个食物不被选,被左边选,被右边选,被两边选,枚举第一个食物的状态 POI2014 ZAL-Freight dp,列出方程后发现由于每辆车发车时间和前i辆车的答案单增,所以两个指针扫一下O(n) POI2015 MYJ 区间dp,设dp[i][r][k]为i ...
分类:
其他好文 时间:
2019-10-03 12:54:07
阅读次数:
88
经典石子合并问题 1.每次取任意两个堆合并,合并价值为两堆重量(价值)之和: 贪心,每次取最小的两堆(哈夫曼模型),优先队列可以直接写 2.每次取相邻两个堆合并,合并价值为两堆重量(价值)之和: 堆数很小的时候(堆数<3000大概):区间dp+平行四边形优化 #include<bits/stdc++ ...
分类:
其他好文 时间:
2019-10-01 20:52:29
阅读次数:
197
题意: n个石子堆排成一排,每次可以将连续的最少L堆,最多R堆石子合并在一起,消耗的代价为要合并的石子总数 求合并成1堆的最小代价,如果无法做到输出0、 分析: 关键在于二维数组无法通过枚举解决了,所以要多开一维,用三维数组来做。 表示的状态为从第 i 堆,到第 j 堆,合并为 x 堆,最小需要的代 ...
分类:
其他好文 时间:
2019-10-01 10:01:55
阅读次数:
93
题意 给定一系列规则:某个长度为2的字符串可以化为某个长度为1的字符串。对于给出的字符串,求可以化为哪些长度为1的字符串。 题目所涉及字符串均由W,I,N,G组成。 思路 区间dp。 子状态$dp[l][r][i]$表示区间[l,r]是否可以化为i。 枚举断点合并即可。 代码 cpp include ...
分类:
其他好文 时间:
2019-09-30 18:20:44
阅读次数:
78
题意 给定一个串,要求对空串进行染色,使其成为目标串。每一次染色可以将一段连续区间染为同一种颜色,求最小次数。 思路 典型的区间dp题。 子状态$f[i][j]$表示该区间最小方案数。显然单点方案数为1。 如果一个区间的左右端点相同,那么可以理解为在最开始将整个区间染色,然后复制[l+1,r]的染色 ...
分类:
其他好文 时间:
2019-09-29 21:37:57
阅读次数:
73
[poj]3280 Cheapest Palindrome 区间dp 题意: 给你长度为m的字符串,其中有n种字符,每种字符都有两个值,分别是插入这个字符的代价,删除这个字符的代价,让你求将原先给出的那串字符变成一个回文串的最小代价。 M<=2000 设 dp[i][j] 为区间 i~j 的回文串的 ...
分类:
其他好文 时间:
2019-09-28 01:03:57
阅读次数:
78
T1 潘 较水吧,直接区间dp dp[i][j]显然表示区间答案,开头预处理出一个的和两个的 考虑转移 若当前的str[i]==str[j],必可以和原来的最后一段形成回文,然后一起删掉 若str[i]!=str[j],就枚举断点就ok了 T2 膜 考虑这题的复杂度差不多是O(n3),想到了神奇的f ...
分类:
其他好文 时间:
2019-09-28 00:49:35
阅读次数:
130