poj 1191(棋盘分割)
2012-04-14 15:15
323 查看
View Code
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<cmath> using namespace std; double col[10][10],s[10][10][10][10],var[10][10][10][10][20]; int main() { double n,a; double sum=0; memset(col,0,sizeof(col)); memset(var,0,sizeof(var)); scanf("%lf",&n); for(int i=1;i<=8;i++) for(int j=1;j<=8;j++) { scanf("%lf",&a); col[i][j]=col[i-1][j]+a; //cout<<a<<endl; sum+=a; } double avg=sum/n; //cout<<avg<<endl; //for(int i=1;i<=8;i++,cout<<endl) //for(int j=1;j<=8;j++) //{ // printf("%.0lf ",col[i][j]); //} for(int i=1;i<=8;i++) for(int j=1;j<=8;j++) for(int k=i;k<=8;k++) for(int h=j;h<=8;h++) { if(h>1) s[i][j][k][h]=s[i][j][k][h-1]+col[k][h]-col[i-1][h]; else s[i][j][k][h]=col[k][h]-col[i-1][h]; var[i][j][k][h][1]=((s[i][j][k][h]-avg)*(s[i][j][k][h]-avg))/n; //printf("%.0lf ",s[i][j][k][h]); } //int x,y,z,p; //while(cin>>x>>y>>z>>p) //cout<<s[x][y][z][p]<<endl; for(int k=2;k<=n;k++) for(int i=1;i<=8;i++) for(int j=1;j<=8;j++) for(int f=i;f<=8;f++) for(int h=j;h<=8;h++) { double mi=9999999999; for(int i0=i;i0<f;i0++) { mi=min(var[i][j][i0][h][k-1]+var[i0+1][j][f][h][1],mi); mi=min(var[i][j][i0][h][1]+var[i0+1][j][f][h][k-1],mi); } for(int j0=j;j0<h;j0++) { mi=min(var[i][j][f][j0][k-1]+var[i][j0+1][f][h][1],mi); mi=min(var[i][j][f][j0][1]+var[i][j0+1][f][h][k-1],mi); } var[i][j][f][h][k]=mi; } printf("%.3lf\n",sqrt(var[1][1][8][8][(int)n])); return 0; }
相关文章推荐
- POJ-1191 棋盘分割 动态规划
- POJ1191棋盘分割 NYOJ87
- poj 1191 棋盘分割 DP
- poj 1191 棋盘分割(dp + 记忆化搜索)
- poj1191 棋盘分割
- 棋盘分割 动态规划 poj 1191
- 【递归 & 动态规划】POJ 1191 棋盘分割
- poj 1191 棋盘分割 (压缩dp+记忆化搜索)
- poj 1191 棋盘分割 【区间dp 记忆化】
- [POJ] 1191 [LUOGU] P1436 棋盘分割
- poj 1191 棋盘分割
- poj 1191 棋盘分割
- [DP+记忆化搜索]poj1191 棋盘分割
- Poj 1191 棋盘分割
- POJ-1191 棋盘分割 记忆化搜索
- POJ 1191 棋盘分割 DP
- poj&nbsp;1191&nbsp;棋盘分割&nbsp;dp
- POJ 1191 棋盘分割
- poj1191-棋盘分割问题
- POJ 1191 棋盘分割 (记忆化搜索)