土人的家
导航
BlogJava
首页
新随笔
联系
聚合
管理
统计信息
Posts - 15
Stories - 0
Comments - 0
Trackbacks - 0
常用链接
我的随笔
我的评论
我的参与
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
DP(4)
(rss)
Greedy(2)
(rss)
Math(2)
(rss)
Search(6)
(rss)
随笔档案
2009年12月 (5)
2009年11月 (10)
搜索
最新评论
阅读排行榜
1. MatchString(185)
2. TheSumOfLuckyNumbers(162)
3. CollectingMarbles(139)
4. IdealString(137)
5. ProperDivisors(137)
评论排行榜
1. TheSumOfLuckyNumbers(0)
2. IdealString(0)
3. AvoidingProduct(0)
4. CollectingMarbles(0)
5. MatchString(0)
TriviaGame
TopCoder SRM 395 Level2 1000
http://www.topcoder.com/stat?c=problem_statement&pm=8463&rd=11129
标准的DP题目
在运算中几处忽略了比较检查,特殊值
导致错误了两次
做题目在主要思路有了之后还是要仔细考虑特殊情况
往往人家关注的地方就在这里
1
import
java.util.
*
;
2
import
java.util.regex.
*
;
3
import
java.text.
*
;
4
import
java.math.
*
;
5
import
java.awt.geom.
*
;
6
7
public
class
TriviaGame
8
{
9
public
int
maximumScore(
int
[] points,
int
tokensNeeded,
int
[] bonuses)
10
{
11
int
L
=
points.length;
12
int
[][] dic
=
new
int
[L][tokensNeeded
+
1
];
13
for
(
int
[] i:dic)
14
Arrays.fill(i,
-
100000
);
15
int
i;
16
dic[
0
][
0
]
=
-
1
*
points[
0
];
17
dic[
0
][
1
]
=
points[
0
];
18
if
(tokensNeeded
==
1
)
19
dic[
0
][
0
]
=
dic[
0
][
1
]
+
bonuses[
0
];
20
for
(i
=
1
; i
<
L;
++
i)
{
21
if
(dic[i
-
1
][
0
]
-
points[i]
>
dic[i][
0
])
22
dic[i][
0
]
=
dic[i
-
1
][
0
]
-
points[i];
23
int
j;
24
for
(j
=
1
; j
<
Math.min(i
+
2
, tokensNeeded);
++
j)
{
25
int
a
=
dic[i
-
1
][j
-
1
]
+
points[i];
26
int
b
=
dic[i
-
1
][j]
-
points[i];
27
dic[i][j]
=
Math.max(a, b);
28
}
29
if
(j
==
tokensNeeded)
{
30
dic[i][j]
=
dic[i
-
1
][j
-
1
]
+
points[i];
31
dic[i][j]
+=
bonuses[i];
32
if
(i
!=
L
-
1
&&
dic[i][j]
>
dic[i][
0
])
33
dic[i][
0
]
=
dic[i][j];
34
}
35
36
}
37
int
max
=
dic[L
-
1
][
0
];
38
for
(
int
in:dic[L
-
1
])
39
if
(in
>
max)
40
max
=
in;
41
return
max;
42
}
43
}
posted on 2009-11-18 20:24
jav7er
阅读(103)
评论(0)
编辑
收藏
所属分类:
DP
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
TheSumOfLuckyNumbers
CollectingMarbles
TriviaGame
SetOfPatterns