poj 1191
                                            
 16284 단어  poj
                    
  
   #include
   "
   stdafx.h
   "
   
#include 
   <
   stdio.h
   >
    
#include 
   <
   math.h
   >
    
#include 
   <
   algorithm
   >
    
 
   using
    
   namespace
    std; 
 
   int
    matrix[
   8
   ][
   8
   ]; 
   int
    s[
   8
   ][
   8
   ][
   8
   ][
   8
   ]; 
   int
    dp[
   15
   ][
   8
   ][
   8
   ][
   8
   ][
   8
   ]; 
   int
    cnt; 
   double
    sum; 
 
   double
    mmin(
   double
    a, 
   double
    b) 
{ 
 
   return
    a 
   <
    b 
   ?
    a : b; 
} 
 
   int
    main() 
{ 
 
   int
    x1, x2, y1, y2, k, a; 
 
   double
    average, sum 
   =
    
   0
   ; 
 scanf(
   "
   %d
   "
   , 
   &
   cnt); 
 
   for
    (x1
   =
   0
   ; x1
   <
   8
   ; x1
   ++
   ) 
 { 
 
   for
    (y1
   =
   0
   ; y1
   <
   8
   ; y1
   ++
   ) 
 { 
 scanf(
   "
   %d
   "
   , 
   &
   matrix[x1][y1]); 
 sum 
   +=
    matrix[x1][y1]; 
 } 
 } 
 
 average 
   =
    sum
   /
   cnt; 
 
 
   for
    (x1
   =
   0
   ; x1
   <
   8
   ; x1
   ++
   ) 
 { 
 
   for
    (y1
   =
   0
   ; y1
   <
   8
   ; y1
   ++
   ) 
 { 
 
   for
    (x2
   =
   x1; x2
   <
   8
   ; x2
   ++
   ) 
 { 
 sum 
   =
    
   0
   ; 
 
   for
    (y2
   =
   y1; y2
   <
   8
   ; y2
   ++
   ) 
 { 
 sum 
   +=
    matrix[x2][y2]; 
 
   if
    (x2 
   ==
    x1) 
 { 
 s[x1][y1][x2][y2] 
   =
    sum; 
 } 
 
   else
    
 { 
 s[x1][y1][x2][y2] 
   =
    s[x1][y1][x2
   -
   1
   ][y2] 
   +
    sum; 
 } 
 
 dp[
   0
   ][x1][y1][x2][y2] 
   =
    s[x1][y1][x2][y2] 
   *
    s[x1][y1][x2][y2]; 
 } 
 } 
 } 
 } 
 
 
   int
    temp; 
 
 
   for
    (k
   =
   1
   ; k
   <=
   cnt
   -
   1
   ; k
   ++
   ) 
 { 
 
   for
    (x1
   =
   0
   ; x1
   <
   8
   ; x1
   ++
   ) 
 { 
 
   for
    (y1
   =
   0
   ; y1
   <
   8
   ; y1
   ++
   ) 
 { 
 
   for
    (x2
   =
   x1; x2
   <
   8
   ; x2
   ++
   ) 
 { 
 
   for
    (y2
   =
   y1; y2
   <
   8
   ; y2
   ++
   ) 
 { 
 dp[k][x1][y1][x2][y2] 
   =
    
   2000000000
   ; 
 
   for
    (a
   =
   x1; a
   <
   x2; a
   ++
   ) 
 { 
 temp 
   =
    mmin(dp[k
   -
   1
   ][x1][y1][a][y2] 
   +
    s[a
   +
   1
   ][y1][x2][y2] 
   *
    s[a
   +
   1
   ][y1][x2][y2], 
 dp[k
   -
   1
   ][a
   +
   1
   ][y1][x2][y2] 
   +
    s[x1][y1][a][y2] 
   *
    s[x1][y1][a][y2]); 
 dp[k][x1][y1][x2][y2] 
   =
    mmin(dp[k][x1][y1][x2][y2], temp); 
 } 
 
 
   for
    (a
   =
   y1; a
   <
   y2; a
   ++
   ) 
 { 
 temp 
   =
    mmin(dp[k
   -
   1
   ][x1][y1][x2][a] 
   +
    s[x1][a
   +
   1
   ][x2][y2] 
   *
    s[x1][a
   +
   1
   ][x2][y2], 
 dp[k
   -
   1
   ][x1][a
   +
   1
   ][x2][y2] 
   +
    s[x1][y1][x2][a] 
   *
    s[x1][y1][x2][a]); 
 dp[k][x1][y1][x2][y2] 
   =
    mmin(dp[k][x1][y1][x2][y2], temp); 
 } 
 } 
 } 
 } 
 } 
 } 
 
 
   double
    ret 
   =
    sqrt((
   double
   )dp[cnt
   -
   1
   ][
   0
   ][
   0
   ][
   7
   ][
   7
   ] 
   /
    (
   double
   )cnt 
   -
    average 
   *
    average); 
 printf(
   "
   %.3f
   "
   , ret);
 system(
   "
   pause
   "
   );
 
   return
    
   0
   ; 
} 
  
                이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
POJ3071: Football(확률 DP)Consider a single-elimination football tournament involving 2n teams, denoted 1, 2, …, 2n. After n rounds, only one team...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.