yzhw@ujs code my life~
江苏大学
pku1335 Digital Onion 递归
题意:
定义括号序列:
Definition: Null parenthesis is a DO. Especially, we call this the Null DO.
Definition: "( )" is a DO. Especially, we call this the primitive DO.
Definition: If both A and B are DOs, then the combined form of "(A)B" is also a DO, where we call A the inside of the DO and B the outside of the DO.
定义排序规则:
[Rule1]: The more weight, the more expensive.
[Rule2]: If the weights of two DOs are equal, then the price depends on the inside DO of the two DOs.
[Rule3]: If the weights of two DOs are the same and the prices of the inside DOs are equal, then the price depends on the outside DO of the two DOs.
给出一个符号序列,求这个之后的一个符号序列是什么
思路:
首先要确定最小的符号序列为:()()()...
然后就是转化方法:
对于一个符号序列(inside)outside,首先看outside能否+1,不行的话看inside能否+1,同时将outside置为最小值形式,再不行的话当outside不为空的时候将inside的weight+1,outside's weight-1,将两部分都转化为最小值形式。
以上描述的是一个递归过程~当然,考虑一种特殊情况,如果整个式子无法进行+1操作,只能将整个式子的weight+1,然后化为最小值形式。
发现java的string竟然是值传递,非常的蛋疼。。我喜欢java的String,没办法,只好用C++的string。。。这种字符串处理的题目string是非常给力的~
代码:
1
# include
<
iostream
>
2
# include
<
string
>
3
# include
<
cstring
>
4
using
namespace
std;
5
string
str;
6
void
make(
int
s,
int
e,
int
type)
7
{
8
int
c
=
0
;
9
for
(
int
i
=
s;i
<
e;i
++
)
10
if
(str[i]
==
'
(
'
)
11
c
++
;
12
c
+=
type;
13
string
res
=
""
;
14
for
(
int
i
=
0
;i
<
c;i
++
) res
+=
"
()
"
;
15
str
=
str.substr(
0
,s)
+
res
+
str.substr(e,str.length()
-
e);
16
}
17
bool
solve(
int
s,
int
e)
18
{
19
if
(s
==
e)
return
false
;
20
else
21
{
22
int
c
=-
1
,end;
23
for
(end
=
s
+
1
;end
<
e
&&
c;end
++
)
24
switch
(str[end])
25
{
26
case
'
(
'
:c
--
;
break
;
27
case
'
)
'
:c
++
;
break
;
28
}
;
29
if
(solve(end,e))
return
true
;
30
else
if
(solve(s
+
1
,end
-
1
))
31
{
32
make(end,e,
0
);
33
return
true
;
34
}
35
else
if
(end
!=
e)
36
{
37
make(end,e,
-
1
);
38
make(s
+
1
,end
-
1
,
1
);
39
return
true
;
40
}
41
else
return
false
;
42
}
43
}
44
int
main()
45
{
46
int
test;
47
cin
>>
test;
48
while
(test
--
)
49
{
50
str.clear();
51
while
(
true
)
52
{
53
string
tmp;
54
cin
>>
tmp;
55
if
(tmp
==
"
$
"
)
break
;
56
str
+=
tmp;
57
}
58
if
(
!
solve(
0
,str.length())) make(
0
,str.length(),
1
);
59
for
(
int
i
=
0
;i
<
str.length();i
++
)
60
cout
<<
str[i]
<<
"
"
;
61
cout
<<
"
$
"
<<
endl;
62
}
63
return
0
;
64
}
posted on 2011-01-25 01:01
yzhw
阅读(242)
评论(0)
编辑
收藏
引用
所属分类:
DP
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
pku3903 最长递增字串的单调性优化
pku 3998 Land Division DP斜率优化
The 36th ACM/ICPC Asia Regional Dalian Online Contest 大连2011ICPC网络赛 个人题解
pku3124 The Bookcase 扩展背包好题
pku1202 Family DAG图上的概率DP
pku 1946 Cow Cycling 非常好的DP
pku1948 Triangular Pastures DP+枚举。海伦公式
pku1335 Digital Onion 递归
pku1332 Finding Liars DP 经典好题
pku1337 A Lazy Worker 很诡异的DP
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © yzhw
<
2011年1月
>
日
一
二
三
四
五
六
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
5
导航
首页
新随笔
联系
管理
统计
随笔 - 183
文章 - 2
评论 - 27
引用 - 0
公告
统计系统
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
(227)
combination math(7)
(rss)
data struct(48)
(rss)
DP(46)
(rss)
geometry&phycise(13)
(rss)
graph(47)
(rss)
numberic(8)
(rss)
others(5)
(rss)
search(23)
(rss)
simple problem~(15)
(rss)
string algorithm(11)
(rss)
ujs acm training(4)
(rss)
文章分类
(2)
combination math
(rss)
data struct
(rss)
DP
(rss)
graph theory(1)
(rss)
numberic
(rss)
others(1)
(rss)
search
(rss)
OJ
lunzi
whu fatboy_cw
yzu大牛
最新随笔
1. pku3908 并查集的一点小变通
2. pku3907 求多边形面积
3. pku3905 2-SAT问题 &我对2-SAT问题的最新理解
4. pku3904 容斥原理的运用,好题!
5. pku3903 最长递增字串的单调性优化
6. pku 3943 Digits on the Floor 并查集的活用(重点)+数字识别
7. pku 3998 Land Division DP斜率优化
8. HDU 3682 To Be an Dream Architect 容斥原理
9. 2010 天津赛区G hdu 3726 splay
10. 2010 ICPC天津赛区 J hdu 3727 划分树的理解
搜索
积分与排名
积分 - 51292
排名 - 436
最新评论
1. re: pku1278 BOAT dp+rmq[未登录]
不好意思,我已经退役2年多了,可能记不得当时实现时候哪里有问题,你可以自己验证下如果用朴素方法求val,而不用RMQ,你的样例能否得出正确值。如果是,那么可能我当时实现RMQ有BUG
--yzhw
2. re: pku1278 BOAT dp+rmq
3
2
2
2
4
1 2 5
2 4 10
3 6 12
2 4 14
你的程序输出31,正确答案27
--无极吧
3. re: pku 3998 Land Division DP斜率优化
评论内容较长,点击标题查看
--lzqxh
4. re: The 36th ACM/ICPC Asia Regional Dalian Online Contest 大连2011ICPC网络赛 个人题解
ans2=min(ans2,1);这句直接ans2=1;就行了吧?
--demo
5. re: The 36th ACM/ICPC Asia Regional Shanghai Site —— Warmup 个人题解
@tjt
有一题当时算法对的,用C++没过。后来用java过掉了
呵呵~我不是说比赛时候做出6题
--yzhw
阅读排行榜
1. The 36th ACM/ICPC Asia Regional Dalian Online Contest 大连2011ICPC网络赛 个人题解(1843)
2. pku1736 恶心的插头DP,终于被搞定了。括号匹配法+hash+四进制(994)
3. poj2513 Colored Sticks 图的连通性判断+欧拉图判断。图里的问题注意首先判断连通性(841)
4. pku 1264 SCUD Busters 凸包+点在形内判断+面积计算(781)
5. The 2010 ACM-ICPC Asia Chengdu Regional Contest Error Curves 三分法求凸函数极值(774)