hihocoder#1338:Aゲーム(間隔DP)

http://hihocoder.com/problemset/problem/1338

間隔DP。

D [L] [R]は最大スコアの上側のハンド部を取る得ることができる[L、R]を表します。

1つ の#defineバグ(X)COUT <<#X << "で" << X << ENDL
 2  の#define IOのstd :: IOS :: sync_with_stdio(0)
 3の#include <ビット/ STDC ++。H>
 4  の#define ITER ::イテレータ
 5  の#define PA対<整数、整数>
 6  の#define PP対<整数、PA>
 7  使って 名前空間  STDを、
8  の#define LL長い長い
 9  の#define MK make_pair
 10  の#define PB一back
 11  の#define SE第
 12  の#define Fiの第
 13  の#define LS 1 << O
14個 の#define O RS << 1 | 1
 15  CONST LL MOD = 1E9 + 7 16  のconst  int型 N = 1E3 + 10 17  
18  のint A [N]、B [N]。
19  INT D [N]、[N]。
20  
21  INT N。
22の 
23  INTの DFS(int型 L、INT R){
 24      であれば(L == R)を返す[L]を、
25  
26      であれば(D [L] [R])戻りD [L] [R]。
27  
28      INT ANS = - 1E9;
29 
30の      ANS = MAX(ANS、B [R] -b [1- 1 ] -dfs(L + 1 、R));
31      ANS = MAX(ANS、B [R] -b [1- 1 ] -dfs(L、R- 1 ))。
32      リターン D [L] [R] = ANS。
33  }
 34  、INT (){主
 35  
36      のscanf(" %d個"、&N)
37      のためにINT iは= 1 ; iが<= N; I ++ ){
 38          のscanf(" %dの"、および[I])。
39          B [I] = B [I- 1 ] +[I]。
40      }
 41      のprintf(" %dの\ n "、DFS(1 、N))。
42  
43 }

またはd [i]は[J] iは左端の点で表され、jは上部手が最大のスコアを取る得ることができるセクションをセクションの長さです。

1つ の#defineバグ(X)COUT <<#X << "で" << X << ENDL
 2  の#define IOのstd :: IOS :: sync_with_stdio(0)
 3の#include <ビット/ STDC ++。H>
 4  の#define ITER ::イテレータ
 5  の#define PA対<整数、整数>
 6  の#define PP対<整数、PA>
 7  使って 名前空間  STDを、
8  の#define LL長い長い
 9  の#define MK make_pair
 10  の#define PB一back
 11  の#define SE第
 12  の#define Fiの第
 13  の#define LS 1 << O
14個 の#define O RS << 1 | 1
 15  CONST LL MOD = 1E9 + 7 16  のconst  int型 N = 1E3 + 10 17  
18  INT N。
19  のint A [N]、B [N]。
20  INT D [N]、[N]。
21  INT メイン(){
 22      のscanf(" %d個"、&N)
23      のためにINT iは= 1 ; iが<= N; I ++ ){
 24          のscanf(" %dの"、および[I])。
25         B [I] = B [I- 1 ] + [I]。
26          D [i]を[ 1 ] = [I]。
27      }
 28      のためにINT J = 2、J <= nであり、j ++ ){
 29          のためにINT iは= 1 ; iは<Nを=; I ++ ){
 30              、D [i]が[j]はMAX(B [iが+ jは= - 1 ] -b [I- 1 ] -d [I] [J- 1 ]、B [I + J- 1 ] -b [I- 1 ] -d [I + 1 ] [J- 1 ])。
31          }
 32      }
 33     printf(" %D \ n "、D [ 1 ] [N])。
34 }

おすすめ

転載: www.cnblogs.com/ccsu-kid/p/12061719.html