题解CF6D CF6Dトカゲや地下室2

$のDFS $まあ

問題の意味

人のチームがあり、あなたが誰か火の玉ポイントを使用することができ、現在は次の人bに損傷を引き起こす、被害をもたらしたであろう。

あなたは、第1および第nを打つすべての死者のためのポイントの最小数を見つけることができません。

注意 

人を殺し、場合にのみ、その血液た<0。

1の#include <iostreamの>
 2の#include <cstdioを>
 3の#include <CStringの>
 4の#include <cmath>
 5の#include <cstdlib>
 6の#include <アルゴリズム>
 7の#include < ストリング >
 8  の#defineっ長い長い
 9  #定義 MAXN 100005
 10  の#define INF 2147483647
 11  の#define MOD 10003の
 12  の#defineのEPS 1E-6
 13件 の#defineパイACOS(-1.0)
 14  の#defineド(X)((X)*(x))を
 15  使って 名前空間をSTD; 
16インラインint型リード(){
 17  、INT X = 0、F = 1チャー CH = GETCHAR()。
18  ながら(!isdigit(CH)){ 場合(CH == ' - ')、F = - 1 ; CH = GETCHAR();}
 19  ながら(isdigit(CH)){X = X * 10 + CH- 48。 CH = GETCHAR();}
 20  リターンのx *のF。
21  }
 22  int型 N、B、H [ 15 ]、TOT、ANS。
23  int型のp [155 ]、ヴァル[ 155 ]。
24インラインボイド検査(){
 25  INT湯= MAX(H [N- 1 ] / A +(H [N- 1 ]> = 0)、H [N] / B +(H [N]> = 0 ))。
26  のためにint型 i = 1 ; iが=湯を<; I ++)はP [++ TOT = N- 1 27  場合(ANS> {TOT)
 28  のためのint型 I = 1を iが++; I <= TOT)[I] = valのP [I]を、
29のANS =のTOT。
30  }
 31 tot- = 優。
32 }
 33のインラインボイド DFS(int型今){ // 标准的には、DFS 
34の 場合(今> N- 1){(チェック)。返す;}
 35  場合(hは[NOW- 1 ] < 0)DFS(今+ 1 )。
36  INT最後= TOT、A = H [NOW- 1 ]、Bの= hの[今]、Cの= hの[今+ 1 ]。
37  一方、1 ){
 38 H [今] - =。H [NOW- 1 ] - = B。
39時間【今+ 1 ] - = B。P [++ TOT] = 今;
40  もし(H [NOW- 1 ] < 0)DFS(今+ 1 )。
41  であれば((H [NOW- 1 ] < 0 && H [今] < 0)||> = TOT ANS){
 42 TOT = 最後;
43時間【NOW- 1 ] = A。H [今] = B。H [今+ 1 ] = C。
44  ブレーク;
45  }
 46  }
 47  }
 48  ){(メイン符号付き
 49 N =(読み取り)=)(読み取ります。B = リード()。
50  のためには、int型 I = 1、hは[I] = iは++; iがn = <) )(読み取ります。
51 ANS = INF。TOT = 0 ;
52の DFS(2 )。
53のprintf(" %d個の\ n " 、ANS)。
54  のためには、int型 I = 1 ; I <= ANS; iは++)のprintf(" %dの" 、ヴァル[I])。
55  リターン 0 ;
56 }
YYY

 

おすすめ

転載: www.cnblogs.com/cbyyc/p/11440424.html