poj 1191 棋盘分割
2012-03-24 20:07
387 查看
题目链接:http://poj.org/problem?id=1191
题目大意:见黑书116页。
题目大意:见黑书116页。
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<string> #include<queue> #include<algorithm> #include<vector> #include<stack> #include<list> #include<math.h> #include<iostream> #include<map> using namespace std; #define inf 0x3f3f3f3f #define Max 110 int max(int a,int b) { return a>b?a:b; } int min(int a,int b) { return a<b?a:b; } int n=8,m; int dp[10][10][10][10][100]; int sum[10][10],rsum[10][10],val[10][10][10][10]; int num; void init() { int i,j,k,l; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { for(k=1;k<=i;k++) { sum[i][j]+=rsum[k][j]; // printf("i %d j %d %d\n",i,j,sum[i][j]); } } for(i=1;i<=n;i++) for(j=1;j<=n;j++) for(k=i;k<=n;k++) for(l=j;l<=n;l++) { val[i][j][k][l]=(sum[k][l]-sum[i-1][l]-sum[k][j-1]+sum[i-1][j-1]) *(sum[k][l]-sum[i-1][l]-sum[k][j-1]+sum[i-1][j-1]); // printf("i %d j %d k %d l %d val %d\n",i,j,k,l,val[i][j][k][l]); } } int main() { // freopen("out.txt","w",stdout); int i,j,k,l,g,x,y; double cnt=0; scanf("%d",&m); for(i=1;i<=n;i++) { rsum[i][0]=0; for(j=1;j<=n;j++) { scanf("%d",&num); cnt+=num; rsum[i][j]=rsum[i][j-1]+num; } } init(); // memset(dp,-1,sizeof(dp)); for(g=1;g<=m;g++) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) for(k=i;k<=n;k++) for(l=j;l<=n;l++) { if(g==1) { dp[i][j][k][l][1]=val[i][j][k][l]; continue; } dp[i][j][k][l][g]=inf; for(x=i;x<k;x++) { if(dp[x+1][j][k][l][g-1]!=inf) dp[i][j][k][l][g]=min(dp[i][j][k][l][g], dp[x+1][j][k][l][g-1]+val[i][j][x][l]); if(dp[i][j][x][l][g-1]!=-1) dp[i][j][k][l][g]=min(dp[i][j][k][l][g], dp[i][j][x][l][g-1]+val[x+1][j][k][l]); } for(y=j;y<l;y++) { if(dp[i][y+1][k][l][g-1]!=inf) dp[i][j][k][l][g]=min(dp[i][j][k][l][g], dp[i][y+1][k][l][g-1]+val[i][j][k][y]); if(dp[i][j][k][y][g-1]!=-1) dp[i][j][k][l][g]=min(dp[i][j][k][l][g], dp[i][j][k][y][g-1]+val[i][y+1][k][l]); } //printf("i %d j %d k %d l %d g %d dp %d\n",i,j,k,l,g,dp[i][j][k][l][g]); } } double ans; ans=(double)dp[1][1][8][8][m]/m-(cnt/m)*(cnt/m); // printf("dp %d cnt %lf\n",dp[1][1][8][8][m],cnt); printf("%.3lf",sqrt(ans)); }
相关文章推荐
- poj_1191 棋盘分割(dp记忆化搜索)
- POJ1191 棋盘分割
- POJ 1191 棋盘分割
- POJ 1191 棋盘分割(DP)
- poj1191 棋盘分割 dp
- poj 1191 棋盘分割
- 洛谷 P1436 POJ 1191 [NOI1999 D1T2] 棋盘分割
- POJ 1191 棋盘分割
- 棋盘分割----POJ1191----DP
- poj1191--棋盘分割(dp)
- poj-1191-棋盘分割
- poj 1191 棋盘分割(记忆化dp+递归)
- POJ 1191 棋盘分割(记忆化搜)
- poj 1191(棋盘分割)
- POJ 1191 棋盘分割 简单记忆化dfs
- poj 1191 棋盘分割 dp-进阶
- poj 1191 棋盘分割 记忆化搜索
- POJ-1191-棋盘分割
- POJ 1191 棋盘分割
- 【poj 1191】棋盘分割 题解&代码(C++)