POJ 1191 棋盘分割
来源:互联网 发布:2017淘宝骗保师 编辑:程序博客网 时间:2024/06/04 18:53
棋盘分割
Time Limit: 1000MSMemory Limit: 10000KTotal Submissions: 11213Accepted: 3951
详见 黑书P116
Description
将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行)
原棋盘上每一格有一个分值,一块矩形棋盘的总分为其所含各格分值之和。现在需要把棋盘按上述规则分割成n块矩形棋盘,并使各矩形棋盘总分的均方差最小。
均方差,其中平均值,xi为第i块矩形棋盘的总分。
请编程对给出的棋盘及n,求出O'的最小值。
原棋盘上每一格有一个分值,一块矩形棋盘的总分为其所含各格分值之和。现在需要把棋盘按上述规则分割成n块矩形棋盘,并使各矩形棋盘总分的均方差最小。
均方差,其中平均值,xi为第i块矩形棋盘的总分。
请编程对给出的棋盘及n,求出O'的最小值。
Input
第1行为一个整数n(1 < n < 15)。
第2行至第9行每行为8个小于100的非负整数,表示棋盘上相应格子的分值。每行相邻两数之间用一个空格分隔。
第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.633Source
Noi 99详见 黑书P116
p[k][x1][y1][x2][y2]:左上角坐标为(x1,y1),右下角坐标为(x2,y2)
的棋盘,设它把切割k次以后得到的k+1块矩形的总分平方和最小值.
s[x1][y1][x2][y2]:左上角坐标为(x1,y1),右下角坐标为(x2,y2)
的棋盘的总和的平方
dp[k][x1][y1][x2][y2] =
1)按横的划分: min(dp[k-1][x1][y1][f][y2]+s[f+1][y1][x2][y2]
, dp[k-1][f+1][y1][x2][y2]+s[x1][y1][f][y2]);
2)按竖的划分: min(dp[k-1][x1][y1][x2][f]+s[x1][f+1][x2][y2]
, dp[k-1][x1][f+1][x2][y2]+s[x1][y1][x2][f]);
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int INF=0x3f3f3f3f;
int mp[10][10];
int dp[20][10][10][10][10];
int getDP(int i,int x1,int y1,int x2,int y2)
{
int ans=INF;
///heng
for(int mid=x1+1;mid<x2;mid++)
{
ans=min(dp[i-1][x1][y1][mid][y2]+dp[1][mid][y1][x2][y2],ans);
ans=min(dp[i-1][mid][y1][x2][y2]+dp[1][x1][y1][mid][y2],ans);
}
///shu
for(int mid=y1+1;mid<y2;mid++)
{
ans=min(dp[i-1][x1][y1][x2][mid]+dp[1][x1][mid][x2][y2],ans);
ans=min(dp[i-1][x1][mid][x2][y2]+dp[1][x1][y1][x2][mid],ans);
}
return ans;
}
int main()
{
int k;
scanf("%d",&k);
for(int i=1;i<=8;i++)
{
for(int j=1;j<=8;j++)
{
scanf("%d",&mp[j]);
mp[j]+=mp[i-1][j]+mp[j-1]-mp[i-1][j-1];
}
}
for(int x1=0;x1<8;x1++)
{
for(int y1=0;y1<8;y1++)
{
for(int x2=x1+1;x2<=8;x2++)
{
for(int y2=y1+1;y2<=8;y2++)
{
int tmp=mp[x2][y2]-mp[x2][y1]-mp[x1][y2]+mp[x1][y1];
dp[1][x1][y1][x2][y2]=tmp*tmp;
}
}
}
}
for(int i=2;i<=k;i++)
{
for(int x1=0;x1<8;x1++)
{
for(int y1=0;y1<8;y1++)
{
for(int x2=x1+1;x2<=8;x2++)
{
for(int y2=y1+1;y2<=8;y2++)
{
dp[x1][y1][x2][y2]=getDP(i,x1,y1,x2,y2);
}
}
}
}
}
double ans=(double)dp[k][0][0][8][8]/k-(((double)mp[8][8])/k)*(((double)mp[8][8])/k);
ans=sqrt(ans);
printf("%.3lf\n",ans);
return 0;
}
* This source code was highlighted by YcdoiT. ( style: Codeblocks )#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int INF=0x3f3f3f3f;
int mp[10][10];
int dp[20][10][10][10][10];
int getDP(int i,int x1,int y1,int x2,int y2)
{
int ans=INF;
///heng
for(int mid=x1+1;mid<x2;mid++)
{
ans=min(dp[i-1][x1][y1][mid][y2]+dp[1][mid][y1][x2][y2],ans);
ans=min(dp[i-1][mid][y1][x2][y2]+dp[1][x1][y1][mid][y2],ans);
}
///shu
for(int mid=y1+1;mid<y2;mid++)
{
ans=min(dp[i-1][x1][y1][x2][mid]+dp[1][x1][mid][x2][y2],ans);
ans=min(dp[i-1][x1][mid][x2][y2]+dp[1][x1][y1][x2][mid],ans);
}
return ans;
}
int main()
{
int k;
scanf("%d",&k);
for(int i=1;i<=8;i++)
{
for(int j=1;j<=8;j++)
{
scanf("%d",&mp
mp
}
}
for(int x1=0;x1<8;x1++)
{
for(int y1=0;y1<8;y1++)
{
for(int x2=x1+1;x2<=8;x2++)
{
for(int y2=y1+1;y2<=8;y2++)
{
int tmp=mp[x2][y2]-mp[x2][y1]-mp[x1][y2]+mp[x1][y1];
dp[1][x1][y1][x2][y2]=tmp*tmp;
}
}
}
}
for(int i=2;i<=k;i++)
{
for(int x1=0;x1<8;x1++)
{
for(int y1=0;y1<8;y1++)
{
for(int x2=x1+1;x2<=8;x2++)
{
for(int y2=y1+1;y2<=8;y2++)
{
dp
}
}
}
}
}
double ans=(double)dp[k][0][0][8][8]/k-(((double)mp[8][8])/k)*(((double)mp[8][8])/k);
ans=sqrt(ans);
printf("%.3lf\n",ans);
return 0;
}
0 0
- POJ 1191棋盘分割
- poj 1191 棋盘分割
- Poj 1191 棋盘分割
- poj 1191 棋盘分割
- POJ 1191 棋盘分割
- poj 1191棋盘分割
- poj 1191 棋盘分割
- POJ-1191-棋盘分割
- POJ 1191 棋盘分割
- poj 1191 棋盘分割
- poj 1191 棋盘分割
- POJ 1191 棋盘分割
- POJ 1191 棋盘分割
- POJ 1191 棋盘分割
- POJ 1191 棋盘分割
- POJ 1191--棋盘分割
- POJ 1191 棋盘分割
- poj 1191 棋盘分割
- Asp.Net MVC4入门指南(9):查询详细信息和删除记录
- DataGuard小结--1
- POJ 1054 The Troublesome Frog
- Asp.Net MVC4入门指南(10):第三方控件Studio for ASP.NET Wijmo MVC4 工具应用
- POJ 3280 Cheapest Palindrome
- POJ 1191 棋盘分割
- 2013 北京 QCon热点分享
- OpenCV学习笔记[1]初探OpenCV
- POJ 1260 Pearls
- Spread Studio中文支持图解
- 自定义取值距离的javascript random()函数
- HDOJ 3555 Bomb
- Spread for ASP.NET 7新功能使用指南
- POJ 2029 Get Many Persimmon Trees
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
欲成欢第三部
欲成欢荔枝
欲成欢塞香蕉逛街
欲成欢shubao
欲成欢全读顾成泽
欲成欢oree
欲成欢全读2
欲成欢16部全
欲成欢全
欲成欢1
欲成欢全文目录
欢成欲
欲成欢塞葡萄第三章
欲成欢成瘾1到6部全本阅读
第二书书包欲成欢二部
我欲擒天
欲星移
欲潮
乡野欲潮全本阅读
乡村欲潮全文在线阅读
乡村欲潮全文
乡野欲潮之绝色村情乡
乡野欲潮绝色村情
乡野欲潮txt
乡野欲潮全文
乡野欲潮txt下载
乡野欲潮全文165
乡野欲潮绝色村嫂
乡野欲潮全文阅读l
乡野欲潮免费阅读
欲弄盖潮by艳酒
乡野欲潮全集免费阅读目录
乡野欲潮,绝色村嫂
乡野欲潮春嫂全文
潮欲txt下载
乡野欲潮桃花村
欲海潮生
欲海潮4
欲界
欲界天女
欲界天500天女一夫