日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

老BOJ 16 棋盘分割

發布時間:2024/9/30 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 老BOJ 16 棋盘分割 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

棋盤分割
Accept:46????Submit:186
Time Limit:1000MS????Memory Limit:65536KB

Description

將一個8*8的棋盤進行如下分割:將原棋盤割下一塊矩形棋盤并使剩下部分也是矩形,再將剩下的部分繼續如此分割,這樣割了(n-1)次后,連同最后剩下的矩形棋盤共有n塊矩形棋盤。(每次切割都只能沿著棋盤格子的邊進行)


原棋盤上每一格有一個分值,一塊矩形棋盤的總分為其所含各格分值之和。現在需要把棋盤按上述規則分割成n塊矩形棋盤,并使各矩形棋盤總分的均方差最小。
均方差,其中平均值,xi為第i塊矩形棋盤的總分。
請編程對給出的棋盤及n,求出O'的最小值。



Input

1行為一個整數n(1 < n < 15)
2行至第9行每行為8個小于100的非負整數,表示棋盤上相應格子的分值。每行相鄰兩數之間用一個空格分隔。


Output

僅一個數,為O'(四舍五入精確到小數點后三位)。



Sample Input

3

1 1 1 1 1 1 1 3

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 0

1 1 1 1 1 1 0 3

Sample Output

1.633





//DP枚舉,注意輸出用%f不可以用%lf #include<cstdlib> #include<cstdio> #include<iostream> #include<algorithm> #include<cmath> #include<cstring> #define ll long long #define inf 0xffffff using namespace std;int a[9][9],bak[9][9][9][9]; double dp[16][9][9][9][9];int sum(int x1,int y1,int x2,int y2){int i,ret=0,j;for(i=x1;i<=x2;i++)for(j=y1;j<=y2;j++)ret+=a[i][j];return ret*ret; }double cut(int k,int x1,int y1,int x2,int y2){int i,j;if(dp[k][x1][y1][x2][y2]>=0)return dp[k][x1][y1][x2][y2];if(k==1)return bak[x1][y1][x2][y2];dp[k][x1][y1][x2][y2]=inf;for(i=x1;i<x2;i++)dp[k][x1][y1][x2][y2]=min(dp[k][x1][y1][x2][y2],min(cut(k-1,x1,y1,i,y2)+bak[i+1][y1][x2][y2],cut(k-1,i+1,y1,x2,y2)+bak[x1][y1][i][y2]));for(i=y1;i<y2;i++)dp[k][x1][y1][x2][y2]=min(dp[k][x1][y1][x2][y2],min(cut(k-1,x1,y1,x2,i)+bak[x1][i+1][x2][y2],cut(k-1,x1,i+1,x2,y2)+bak[x1][y1][x2][i]));return dp[k][x1][y1][x2][y2]; } int main(){int i,j,k,l,n;double ans,all=0;scanf("%d",&n);for(i=1;i<9;i++)for(j=1;j<9;j++)scanf("%d",&a[i][j]),all+=a[i][j];for(i=1;i<9;i++)for(j=1;j<9;j++)for(k=i;k<9;k++)for(l=j;l<9;l++)bak[i][j][k][l]=sum(i,j,k,l);memset(dp,-1,sizeof dp);all/=n;all*=all;cut(n,1,1,8,8);printf("%.3f\n",sqrt(dp[n][1][1][8][8]/n-all));return 0; }

總結

以上是生活随笔為你收集整理的老BOJ 16 棋盘分割的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。