【BZOJ1084】DP

質問は非常に簡単でした

分析には
かなり疑問を退屈。
状態遷移は明らかにされて
、その後に行わ。

#include <ビット/ STDC ++。H>
の#define SC(N)のscanf( "%d個"、&N)
の#define PT(N)のprintf( "%d個の\ n"、N)
の#define担当者(I、B I ++); I <= B;)(I = int型のため
の#define VIベクトル<整数>
長い長い> <の#define VLベクター
の#define PB一back
名前空間stdを使用。
CONST INT MAXN = 110。
int型S1 [MAXN]、[MAXN]とs2;
N INT、M、K。
int型DP [MAXN] [MAXN] [MAXN]。
INTメイン(http://www.my516.com)
{
scanf関数( "%D%D%D"、&N、&M、およびK);
(M == 1)の場合
、{
ため(INT i = 1; iが<= N; iは++)
{
int型のxと、
scanf関数( "%のD"、&x)は、
S1 [I] = S1 [I-1] + X。
}
(int型、L = 1、L <= K、L ++)のために
{
(iは1 = int型のために、私は<= N。

DP [I] [L] [0] DP [I-1] [L] [0] =。
(INT J = 0; J <I、J ++)用
{
DP [I] [L] [0] = MAX(DP [I] [L] [0]、DP [J] [L-1] [0] + S1 [i]は-S1 [J])。
}
}
}
のprintf( "%d個の\ n"、DP [n]が[K] [0])。
}

{
ため(iは++; iがn = <I = 1 INT)
{
int型X、Y。
scanf関数( "%dの%のD"、およびX&Y)。
S1 [I] = S1 [I-1] + X。
S2 [I] = S2 [I-1] + Y。
}
のために(int型、L = 1、L <= K、L ++)
{
ため(iは++; iがn = <I = 1 INT)
{
ため(int型のJ = 1; J <= nであり、j ++)
{
DP [I] [J] [L] = MAX(DP [I-1]〜[J] [L]、DP [I]、[J-1] [L])。
(S ++; S <I INT S = 0)のための
{
MAX(DP [I] [J] [L] = DP [I] [J] [L]、DP [S] [J] [L-1] + S1 [i]は-S1 [S])。
}
(; S <J; int型、S = 0秒++)用
{
DP [I] [J] [L] = MAX(DP [I] [J] [L]、DP [I] [S] [L-1] + S2 [J] -S2 [S])。
}
(I == j)の場合
{
ため(INT S = 0; S <I; S ++)
{
DP [I] [J] [L] = MAX(DP [I] [J] [L]、DP [S ] [S] [L-1] + S1 [i]は-S1 [S] + S2 [J] -S2 [S])。
}
}
}
}
}
のprintf( "%d個の\ n"、DP [N] [N] [K])。
}
0を返します。
}

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75

---------------------

おすすめ

転載: www.cnblogs.com/ly570/p/11109180.html