P1831レバレッジ数
正の解決策かどうかを言う:×
明確ビットDPの数が、開始することができないと感じ、実際の数は、18ビットDP、各列挙支点であってもよいし、トルクは各数について計算することができるが、トルクが0に貢献とします
書式#include <マップ> 書式#include < 設定 > 書式#include <ctimeの> の#include <cmath> の#include <キュー> の#include <スタック> の#include <ベクトル> の#include < 文字列 > の#include <ビットセット> の#include <cstdioを> #include <cstdlib> の#include <CStringの> する#include <sstream提供> の#include <iostreamの> する#include <アルゴリズム> の#include <機能> 使用して 名前空間STD。 #define(I、x、y)のための式(I = xをint型;方には<= yと; iが++) の#define(I、x、y)は_forための式(I = xをint型; I> = Y; i--) の#define MEM(F、X)のmemset(F、X、はsizeof(F)) の#defineのSca(X)のscanf( "%dの"、およびX) の#define SCA2(X、Y)のscanf( "%D%dの"、およびX 、&Y) の#define SCA3(X、Y、Z)のscanf( "%D%D%D"、およびX&Y、およびZ)が #defineする SCL(X)のscanf( "%のLLD"、およびX) の#defineぷり(Xは)のprintf( "%d個の\ n"、X) の#define PRL(X)のprintf( "%LLDする\ n"、X) の#define CLR(U)のために(INT i = 0; iが= Nを<; I ++)は、U [I] .clear(); #defineは長い長いLL の#define ULL符号なしの長い長い の#define融点make_pairの に#define PIIペア<int型、int型> #define PIL対<int型、長い長い> の#define PLLペア<長い長い、長い長い> の#define PB一back の#define第FI の#define SE第二 のtypedefベクトル < INT > VI。 LL {)(LL X読み取り = 0、F = 1。チャー C = GETCHAR()。一方、(C < ' 0 ' || C> ' 9 '){ もし、(C == ' - ')、F = - 1 ; C = GETCHAR();} 一方(> = C ' 0 ' && C <= ' 9 '){X = X * 10 + C - ' 0 ' ; C = GETCHAR();} 戻りのx *のF;} CONST ダブル PI = ACOS( - 1。); constの ダブル EPS = 1E- 9 。 CONST INT MAXN = 110 。 const int型 INF = 0x3f3f3f3f 。 const int型 MOD = 1E9 + 7 。 int型N、M、K、今。 INT STR [ 20 ]。 LL DP [ 20 ] [ 3000 ]。 LLのDFS(int型の POS、int型のval、int型の制限){ 場合(POS!)戻りヴァル== 0 ; もし(ヴァル< 0)戻り 0 ; もし(リミット&&〜DP [POS] [ヴァル]!)戻りDP [POS] [ヴァル]。 LL ANS = 0 。 int型 =上限をアップSTR [POS]:?9 。 以下のために(int型 i = 0 ; iが<=最大、iは++ ){ ANS + = DFS(POS - 1、ヴァル+ iは(POSを* -今)、限界&&(I == アップ))。 } もし DP [POS] [ヴァル] =(制限!)年。 返す歳; } LL {(LLのX)を解きます もし(!x)が復帰 1 。 INTは L = 0 。 LL Mは =のX。 一方、{(M) L ++; STR [L] = Mの%10 。 M / = 10 。 } LL ANS = 0 。 以下のために(int型 i = 1 ; iが= Lを<; iは++ ){ MEM(DP、 - 1 )。 今 = I; 年間 + = DFS(L、0、1 )。 } 返却年- (1 - 1 ); } INT {main()の LL Lを読み取る=()、R = リード()。 PRL((R)を解く - (L解く- 1 ))。 リターン 0 ; }
P2939 [USACO09FEB]リメイクトレイルを刷新
正の解決策かどうかを言う:√
これは、[I] [j]は、点I jが直接メンテナンスに高速道路、ダイクストラ最も短絡されている表す最短メンテナンスDISのオリジナルタイトルであります
P2198キルアリ
正の解決策かどうかを言う:√
X - - YはDP [X] [Y] xがカラムを通る放射線、カラムにY放射線の最小値、nは干渉の列番号を表すと思われます
DP [X] [Y] =分(DPの[X - 1] [Y] +(X - 1)* G×(T + Yの* B)、DP [X] [Y - 1] + X * G * (T +(Y - 1)* B、DP [X] [Y] +(X + R)* G×(T + Yの* B)
P4766 [CERC2014]宇宙の侵略者
正の解決策かどうかを言う:×
離散間隔DPの後
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 const int型 MAXN = 6010 ; const int型 INF = 0x3f3f3f3f 。 int型N; 構造体ノード{ int型のL、R、D。 ノード(INTは L = 0、INTの R = 0、INT D = 0 )、L(リットル)、R(R)、D(D){} }ノード[MAXN]。 int型のハッシュ[MAXN]。 int型DP [MAXN] [MAXN]。 INT のmain(){ int型の T。scanf関数(" %のD "、&T)。 一方、(T-- ){ scanf関数(" %のD "、&N)。int型 CNT = 0 ; 用(int型 i = 1 ; iが<= N iが++ ){ scanf関数(" %D%D%D "、およびノード[I] .L&ノード[I] .R&ノード[I] .D)。 ハッシュ[ ++ CNT] =ノード[I] .L。ハッシュ[++ CNT] = ノード[I] .R。 } ソート(ハッシュ + 1、ハッシュ+ 1本の + CNT)。 CNT =ユニーク(ハッシュ+ 1、ハッシュ+ 1 + CNT) -ハッシュ- 1 。 用(int型 i = 1 ; iが<= N iが++ ){ ノード[i]は.L = LOWER_BOUND(ハッシュ+ 1、ハッシュ+ 1本の + CNT、ノード[i]が.L) - ハッシュ。 ノード[I] .R = LOWER_BOUND(ハッシュ+ 1、ハッシュ+ 1本の + CNT、ノード[I] .R) - ハッシュ。 } 用(INT LEN = 1 ; LEN <= CNT; LEN ++ ){ ための(int型、L = 1、L + LEN - 1 <= CNT; L ++ ){ int型、R = L + LEN - 1 。 INTの ID = 0 。 以下のために(int型 I = 1、N = iは<; iは++ ){ 場合(ノード[i]が.L <L ||ノード[I] .R> R)続けます。 もし(!ID ||ノード[ID] .D <ノード[I] .D)ID = I。 } もし(!{ID) DP [L] [R] = 0 ; 続け; } DP [L] [R] = INF。 用(int型 ; K <=ノード[ID] .R kは++、K =ノード[ID] .L {) DP [L] [R] =分(DP [L] [R]、DP [L] [K - 1 ] + DP [K + 1 ] [R] + ノード[ID] .D)。 } } } printf(" %d個の\ n "、DP [ 1 ] [CNT])。 } リターン 0 ; }