您的位置:首页 > 其它

poj 1191 棋盘分割 (dp)

2012-08-11 09:34 495 查看
好纠结的一道题啊,一开始 写错了个字母 ,跳了半天,后来脚上去竟然不对,,看了 discuss 里面的 将 所有数据 改为 double 类型 秒过,汗。。。。。。。。。

棋盘分割

Time Limit: 1000MSMemory Limit: 10000K
Total Submissions: 9151Accepted: 3215
Description

将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行)
View Code

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<queue>
#include<vector>
#include<string>
#define Min(a,b) a<b?a:b
#define Max(a,b) a>b?a:b
#define CL(a,num) memset(a,num,sizeof(a));
#define maxn  205
#define eps  1e-6
#define inf 9999999
#define mx 1<<60

using namespace std;

double  mat[10][10];
double  dp[20][10][10][10][10];
double s[10][10][10][10] ;

void init()
{
int i,j,k,l;
double  sum  = 0;

for(  i = 1;i <= 8;++i)
{
for( j = i; j <= 8 ;++j)
{

for(k = 1 ; k <= 8; ++k )
{
sum = 0;

for(l = k ; l <= 8 ;++l)
{
sum += mat[l][j] - mat[l][i - 1] ;
s[k][i][l][j] = sum*sum;

}

}

}
}

}
double  dfs(int k,int x1,int y1,int x2,int y2)
{

int i;
double tmp ;

if(dp[k][x1][y1][x2][y2] >= eps ) return dp[k][x1][y1][x2][y2] ;

if( k == 1)
{
dp[k][x1][y1][x2][y2] = s[x1][y1][x2][y2] ;
return dp[k][x1][y1][x2][y2] ;
}
else
{
double  ans = inf ;
for(i = x1; i < x2; ++i)
{
tmp = min(dfs(k - 1,x1,y1, i,y2) + s[i+1][y1][x2][y2],dfs(k - 1,i+1,y1,x2,y2) + s[x1][y1][i][y2]);
ans = min(ans,tmp);
}

for(i = y1; i < y2 ; ++i )
{
tmp = min(dfs(k - 1,x1,y1,x2,i) + s[x1][i + 1][x2][y2],dfs(k - 1,x1,i+1,x2,y2) + s[x1][y1][x2][i]);
ans  = min(ans,tmp);
}

dp[k][x1][y1][x2][y2] = ans ;

return dp[k][x1][y1][x2][y2];

}
}
int main()
{
int n,i,j;
double  a;
//freopen("data.in","r",stdin);
scanf("%d",&n);

double cnt = 0;

for( i = 1;i <= 8;++i )
{
double sum = 0;
for( j = 1; j <= 8 ;++j)
{
scanf("%lf",&a);
sum += a;
cnt +=a;
mat[i][j] = sum ;
}
}

init();

double  k = cnt/(n*1.0);

double  ans  =  dfs(n,1,1,8,8);

ans = (ans/(n*1.0)) - k*k ;

ans = sqrt(ans);
printf("%.3lf\n",ans);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: