poj1191 바둑판 분할 동태 기획
// chessboardParting.cpp: 。
//
#include "stdafx.h"
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define MAXN 16
int n;
int chessBoard[8][8];
int sum[9][9];
double dp[9][9][9][9][MAXN];//dp(u,v,x,y,k) means the maximum gotten from cutting from (u,v) to (x,y) for k times
double average;
double powe2(double a) { return a * a; }
double blockSum(int x1, int y1, int x2, int y2)
{
return powe2(sum[x1][y1] - sum[x1][y2] - sum[x2][y1] + sum[x2][y2] - average);
}
void init()
{
average = 0;
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++) {
scanf("%d", &chessBoard[i][j]);
average += chessBoard[i][j];
}
average /= n;
}
double minSeparation(int u, int v, int x, int y, int times)
{
assert(u < x&&v < y&× >= 2);
double ret = 6400001;
for (int i = u + 1; i < x; i++)
ret = min(ret, min(dp[u][v][i][y][1] + dp[i][v][x][y][times - 1],
dp[u][v][i][y][times - 1] + dp[i][v][x][y][1]));
for (int i = v + 1; i < y; i++)
ret = min(ret, min(dp[u][v][x][i][1] + dp[u][i][x][y][times - 1],
dp[u][v][x][i][times - 1] + dp[u][i][x][y][1]));
return ret;
}
void solve()
{
memset(sum, 0, sizeof(sum));
for (int i = 7; i >= 0; i--)
for (int j = 7; j >= 0; j--)
sum[i][j] = chessBoard[i][j] + sum[i + 1][j] + sum[i][j + 1] - sum[i + 1][j + 1];
for (int i = 0; i < 9; i++)
for (int j = 0; j < 9; j++)
for (int k = 0; k < 9; k++)
for (int l = 0; l < 9; l++)
for (int times = 0; times <= n; times++)
dp[i][j][k][l][times] = 6400001;
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
for (int k = i + 1; k < 9; k++)
for (int l = j + 1; l < 9; l++)
dp[i][j][k][l][1] = blockSum(i, j, k, l);
for (int partBlockNum = 2; partBlockNum < n; partBlockNum++) //part k times
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
for (int k = i + 1; k < 9; k++)
for (int l = j + 1; l < 9; l++)
dp[i][j][k][l][partBlockNum] = minSeparation(i, j, k, l, partBlockNum);
double ans = minSeparation(0, 0, 8, 8, n);
printf("%.3lf
", sqrt(ans / n));
}
int main()
{
while (scanf("%d", &n) != EOF) {
init();
solve();
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PAT 1094 구 글 채용메모: 1. subString 왼쪽 닫 고 오른쪽 열 기 2, 0 은 출력 을 보충 해 야 합 니 다. 그렇지 않 으 면 형식 이 잘못 되 었 습 니 다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.