POJ 1191 棋盘分割(DP)
2014-06-12 17:01
495 查看
题目链接
题意 : 中文题不详述。
思路 : 黑书上116页讲的很详细。不过你需要在之前预处理一下面积,那样的话之后列式子比较方便一些。
先把均方差那个公式变形,
另X表示x的平均值,两边平方得
View Code
题意 : 中文题不详述。
思路 : 黑书上116页讲的很详细。不过你需要在之前预处理一下面积,那样的话之后列式子比较方便一些。
先把均方差那个公式变形,
另X表示x的平均值,两边平方得
//1191 #include <stdio.h> #include <iostream> #include <cmath> using namespace std ; double dp[15][9][9][9][9] ,s[9][9] ; int n ; double ss(int x1,int y1,int x2,int y2) { double sss = s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1] ; return sss * sss ; } double DFS(int k,int x1,int y1,int x2,int y2) { if(k == 1) return ss(x1,y1,x2,y2) ; if(fabs(dp[k][x1][y1][x2][y2]) > 1e-6) return dp[k][x1][y1][x2][y2] ; double minn = 1 << 29 ; for(int i = x1 ; i < x2 ; i++) minn = min(minn,min(DFS(k-1,x1,y1,i,y2)+ss(i+1,y1,x2,y2),DFS(k-1,i+1,y1,x2,y2)+ss(x1,y1,i,y2))) ; for(int i = y1 ; i < y2 ; i++) minn = min(minn,min(DFS(k-1,x1,y1,x2,i)+ss(x1,i+1,x2,y2),DFS(k-1,x1,i+1,x2,y2)+ss(x1,y1,x2,i))) ; dp[k][x1][y1][x2][y2] = minn ; return minn ; } int main() { scanf("%d",&n) ; int x ; //memset(s,0,sizeof(s)) ; for(int i = 1 ; i <= 8 ; i++) for(int j = 1 ; j <= 8 ; j++) { scanf("%d",&x) ; s[i][j] = x + s[i-1][j]+s[i][j-1]-s[i-1][j-1] ; } printf("%.3lf\n",sqrt(DFS(n,1,1,8,8)/n-(s[8][8]/n)*(s[8][8]/n)) ); return 0 ; }
View Code
相关文章推荐
- poj 1191 棋盘分割(dp)
- POJ 1191 棋盘分割(DP)
- [poj 1191] 棋盘分割 划分型DP
- poj 1191 棋盘分割 dp-进阶
- poj 1191 棋盘分割 DP
- 棋盘分割----POJ1191----DP
- poj 1191 棋盘分割 (dp)
- poj1191--棋盘分割(dp)
- poj1191 [NOI1999] 棋盘分割(dp)
- POJ 1191 && HDU 2517 棋盘分割(dp)
- POJ 1191 棋盘分割 DP
- 【DP】 POJ 1191 棋盘分割 记忆化搜索
- poj1191 棋盘分割 dp
- POJ 1191 棋盘分割(DP)
- 【DP】 POJ 1191 棋盘分割 记忆化搜索
- poj-1191- 棋盘分割dp
- poj&nbsp;1191&nbsp;棋盘分割&nbsp;dp
- poj1191-dp棋盘分割
- 经典问题六.【二维的区间dp】棋盘分割 poj 1191
- poj 1191棋盘分割(递归dp, 记忆化搜索)