大智若愚
不在沉默中爆发,就在沉默中消亡。
C++博客
|
首页
|
发新随笔
|
发新文章
|
联系
|
聚合
|
管理
随笔:7 文章:1 评论:4 引用:0
找回文 (LCS)
题意:对一字符串,计算最少需要的添加的字符,是的该串变成回文。
分析:先求逆序,再与原串进行比较,求出最长的公共子序列 N,答案就是strlen(str)-N;
1
code:
2
#include
<
iostream
>
3
using
namespace
std;
4
5
char
str1[
10006
];
6
char
str2[
10006
];
7
int
len;
8
int
c[
10006
][
3
];
9
10
int
LCS()
11
{
12
int
i,j,k;
13
memset(c,
0
,
sizeof
(c));
14
for
(j
=
1
;j
<=
len;j
++
)
15
{
16
for
(i
=
1
;i
<=
len;i
++
)
17
{
18
if
(str1[i
-
1
]
==
str2[j
-
1
])
19
c[i][j
%
3
]
=
c[i
-
1
][(j
-
1
+
3
)
%
3
]
+
1
;
20
else
if
(c[i
-
1
][j
%
3
]
>=
c[i][(j
-
1
+
3
)
%
3
])
21
c[i][j
%
3
]
=
c[i
-
1
][j
%
3
];
22
else
c[i][j
%
3
]
=
c[i][(j
-
1
+
3
)
%
3
];
23
}
24
}
25
return
c[len][(len)
%
3
];
26
}
27
28
int
main()
29
{
30
int
i,j,k;
31
while
(EOF
!=
scanf(
"
%d
"
,
&
len))
32
{
33
scanf(
"
%s
"
,str1);
34
35
for
(i
=
0
;i
<
len;i
++
)
36
str2[i]
=
str1[len
-
i
-
1
];
37
38
k
=
LCS();
39
printf(
"
%d\n
"
,len
-
k);
40
}
41
return
0
;
42
}
发表于 2010-08-10 13:55
owing
阅读(333)
评论(0)
编辑
收藏
引用
所属分类:
动态规划
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
hdu 3652 (DP) 2010 四川网络赛B题
hdu 1565 (状态dp)
多重背包 (滚动数组)
找回文 (LCS)
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
<
2010年8月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
公告
~~~爱就在我们心中~~~
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
动态规划(4)
(rss)
数论
(rss)
图论
(rss)
线段树(1)
(rss)
字符串(2)
(rss)
组合数学
(rss)
随笔档案
2010年9月 (1)
2010年8月 (6)
文章分类
情感
(rss)
生活
(rss)
事业(1)
(rss)
文章档案
2010年8月 (1)
搜索
最新评论
1. re: hdu 1565 (状态dp)
要是能给这题多点注释就好了,让初学者更好懂
--Lvsi
2. re: hdu 1565 (状态dp)
23.24两行什么意思
--arshione
3. re: 多重背包 (滚动数组)
如果n,T不大的话,是可以的。
--owing
4. re: 多重背包 (滚动数组)
先按面值从大到小排一次序,然后转完全背包并记录张数不可以吗?时间复杂度O(NT)。我只是大概的说说,献丑了,呵呵。
--Onway
阅读排行榜
1. hdu 1867 (kmp 后缀的最长前缀)(912)
2. hdu 1565 (状态dp)(818)
3. 多重背包 (滚动数组)(724)
4. hdu 1823 (二维线段树)(568)
5. hdu 3652 (DP) 2010 四川网络赛B题(344)
评论排行榜
1. 多重背包 (滚动数组)(2)
2. hdu 1565 (状态dp)(2)
3. pku 1204 (简单的 trie 树)(0)
4. hdu 1823 (二维线段树)(0)
5. hdu 1867 (kmp 后缀的最长前缀)(0)