一开始第一反映是用暴搜+回溯剪枝,妥妥的超时,见numDistinct0函数。
后来想到这跟公共子串有点类似,满足最优子结构和重叠问题,因此可用DP。
状态转移方程如下:
{ dp[i-1,j-1]+dp[i-1][j] , 当s[i]==s[j],0
dp[i,j]={ dp[i-1][j], 当s[i]!=s[j] ,0
...
分类:
其他好文 时间:
2014-11-09 23:51:47
阅读次数:
256
01背包写成一维的好处是省内存,坏处是中间过程都没被保存,而这题要求打出路径
如果直接写一维的然后标记,是不是有些本末倒置
如果写记忆化搜索,我没想出来怎么写……
也懒得想了,反正有现成的二维形式,二维的好处就是保存了路径
所以很容易可以回溯出路径,其实这里如果写成一维的反而浪费了内存,因为你还要
多开一个二维标记,所以说是本末倒置
#in...
分类:
其他好文 时间:
2014-11-09 19:36:57
阅读次数:
214
给定一个串,分割该串,使得每个子串都是回文串。找出所有可能的组合。
方法:暴搜+回溯
class Solution {
public:
int *b,n;
vector >ans;
void dfs(int id,string &s,int len){
if(id>=n){
if(len>0){
vectorvt;
vt.push_back(s.substr(0...
分类:
其他好文 时间:
2014-11-09 11:18:19
阅读次数:
174
回溯引用:前后一致匹配
回溯引用(backreference)在文本匹配和文本替换操作里非常有用。
例子1:匹配HTML中任意一级的标题栏中的内容例如:nihao
模式1:.*? 【注意这里使用懒惰型的*】
但是这里模式不是正确的:例如:abcd 显示不是正确的
模式2:.*? 正确
回溯引用匹配:模式的后半部分引用在前半部分中定义的子表达式【允许正...
分类:
其他好文 时间:
2014-11-08 20:52:17
阅读次数:
204
排列组合这种问题似乎用回溯法比较合适,括号只有左括号和或右扣号,把左扣号定好了,右括号也就定好了。用一个栈来存中间结果,优先放左扣号,符合条件输出后回溯。#include int main(int argc, char *argv[]) { int n = atoi(argv[1]); ...
分类:
其他好文 时间:
2014-11-07 16:15:06
阅读次数:
158
题意:给出了两个瓶子的容量A,B, 以及一个目标水量C,对A,B可以进行如下操作:
FILL(i) 将瓶i装满水
DROP(i) 将瓶i倒空
POUR(i,j) 将瓶i中的水倒入瓶j,此操作后要么瓶j装满水,要么瓶i为空
求至少要几次操作能使A或者B装的水为C,并输出具体操作
分析:可以从6个方面bfs,因为要输出具体操作,可以用数组模拟队列,
并记录前一次操作的状态,最后再回溯路径...
分类:
其他好文 时间:
2014-11-07 13:10:47
阅读次数:
213
??
唉!先直接上源代码吧!什么时候有时间的再来加说明!
#include
#include
#include
#include
#include
#include
using namespace std;
/*
*i代表PUSH,o代表POP
*/
bool judge(deque sou,deque des,vector & res)
{
stack inistack;
for(ve...
分类:
其他好文 时间:
2014-11-06 14:59:49
阅读次数:
126
Seam CarvingDescriptionFish likes to take photo with his friends. Several days ago, he found that some pictures of him were damaged. The trouble is th...
分类:
其他好文 时间:
2014-11-05 19:26:39
阅读次数:
255
常见的字符串匹配时,模式串长度为n,源串长度为m,则从头匹配,两个指针i指向源串,j指向模式串,如遇到不同则回溯使j=0,这样就要反复匹配会使效率变低。因为在如今i之前 的模式串与匹配串的匹配是同样的,即回溯时,不用将模式串与源串进行匹配,而仅仅将模式串与自身匹配就可以得到其是否须要回溯以及回溯到何...
分类:
编程语言 时间:
2014-11-04 22:31:39
阅读次数:
246