TopCoder SRM 395 Level2 1000
http://www.topcoder.com/stat?c=problem_statement&pm=8463&rd=11129
標準的DP題目
在運算中幾處忽略了比較檢查,特殊值
導致錯誤了兩次
做題目在主要思路有了之后還是要仔細考慮特殊情況
往往人家關(guān)注的地方就在這里
http://www.topcoder.com/stat?c=problem_statement&pm=8463&rd=11129
標準的DP題目
在運算中幾處忽略了比較檢查,特殊值
導致錯誤了兩次
做題目在主要思路有了之后還是要仔細考慮特殊情況
往往人家關(guān)注的地方就在這里
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
}

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

32

33

34

35

36

37

38

39

40

41

42

43
