[BZOJ 1048] [HAOI2007] 分割矩阵 【记忆化搜索】
题目链接:BZOJ - 1048
题目分析
感觉这种分割矩阵之类的题目很多都是这样子的。
方差中用到的平均数是可以直接算出来的,然后记忆化搜索 Solve(x, xx, y, yy, k) 表示横坐标范围 [x, xx], 纵坐标范围 [y, yy] 的矩阵切成 k 块的最小 sigma((Vi - Ave)^2) 。
然后再递归将矩阵分得更小,直到 k 为 1 的时候直接返回相应的值。
代码
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdio> using namespace std; const int MaxN = 15 + 5, MaxT = 15 + 5; int n, m, t, Num;
int Sum[MaxN][MaxN]; typedef double DB; const DB INF = 999999999; DB Ave;
DB f[MaxN][MaxN][MaxN][MaxN][MaxT]; DB Get(int x, int y, int xx, int yy) {
return (DB)(Sum[xx][yy] - Sum[x - 1][yy] - Sum[xx][y - 1] + Sum[x - 1][y - 1]);
} inline DB Sqr(DB x) {return x * x;}
inline DB gmin(DB a, DB b) {return a < b ? a : b;} DB Solve(int x, int xx, int y, int yy, int k) {
if (f[x][xx][y][yy][k] != -1) return f[x][xx][y][yy][k];
if (k == 1) return f[x][xx][y][yy][k] = Sqr(Get(x, y, xx, yy) - Ave);
DB ret = INF;
for (int i = x; i <= xx - 1; ++i)
for (int j = 1; j <= k - 1; ++j)
ret = gmin(ret, Solve(x, i, y, yy, j) + Solve(i + 1, xx, y, yy, k - j));
for (int i = y; i <= yy - 1; ++i)
for (int j = 1; j <= k - 1; ++j)
ret = gmin(ret, Solve(x, xx, y, i, j) + Solve(x, xx, i + 1, yy, k - j));
return f[x][xx][y][yy][k] = ret;
} int main()
{
scanf("%d%d%d", &n, &m, &t);
for (int i = 1; i <= n; ++i)
for (int j = i; j <= n; ++j)
for (int p = 1; p <= m; ++p)
for (int q = p; q <= m; ++q)
for (int o = 1; o <= t; ++o)
f[i][j][p][q][o] = -1;
memset(Sum, 0, sizeof(Sum));
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
scanf("%d", &Num);
Sum[i][j] = Sum[i][j - 1] + Sum[i - 1][j] - Sum[i - 1][j - 1] + Num;
}
}
Ave = (DB)Sum[n][m] / (DB)t;
Solve(1, n, 1, m, t);
printf("%.2lf\n", sqrt(f[1][n][1][m][t] / t));
return 0;
}
[BZOJ 1048] [HAOI2007] 分割矩阵 【记忆化搜索】的更多相关文章
- BZOJ1048:[HAOI2007]分割矩阵(记忆化搜索DP)
Description 将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此分割(当然也可以只分割其中的一个), 这样分割了(n-1)次后,原矩阵被分割成 ...
- BZOJ 1048 [HAOI2007]分割矩阵
1048: [HAOI2007]分割矩阵 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 623 Solved: 449[Submit][Status ...
- [BZOJ 1068] [SCOI2007] 压缩 【记忆化搜索】
题目链接:BZOJ - 1068 题目分析 这种记忆化搜索(区间 DP) 之前就做过类似的,也是字符串压缩问题,不过这道题稍微复杂一些. 需要注意如果某一段是 S1S1 重复,那么可以变成 M + S ...
- 1048: [HAOI2007]分割矩阵 - BZOJ
Description 将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此分割(当然也可以只分割其中的一个),这样分割了(n-1)次后,原矩阵被分割成了 ...
- BZOJ 1079: [SCOI2008]着色方案 记忆化搜索
1079: [SCOI2008]着色方案 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- BZOJ 2246 [SDOI2011]迷宫探险 (记忆化搜索)
题目大意:太长了,略 bzoj luogu 并没有想到三进制状压 题解: 3进制状压陷阱的状态,0表示这种陷阱的状态未知,1已知危险,2已知不危险 然后预处理出在当前状态下,每种陷阱有害的概率,设为$ ...
- 【BZOJ】1048: [HAOI2007]分割矩阵
http://www.lydsy.com/JudgeOnline/problem.php?id=1048 题意:给出一个a×b(a,b<=10)的矩阵,带一个<=100的权值,现在要切割n ...
- 1048: [HAOI2007]分割矩阵
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1184 Solved: 863[Submit][Status][Discuss] Descripti ...
- poj 1191 棋盘分割(dp + 记忆化搜索)
题目:http://poj.org/problem?id=1191 黑书116页的例题 将方差公式化简之后就是 每一块和的平方 相加/n , 减去平均值的平方. 可以看出来 方差只与 每一块的和的平方 ...
随机推荐
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(7)-MVC与EasyUI DataGrid
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(7)-MVC与EasyUI DataGrid 没有源码的同学跳到第六讲下载源码再来. 我们需要漂亮的UI, ...
- cocos2d-x3.0 ListView
.h #include "cocos2d.h" #include "cocos-ext.h" #include "ui/CocosGUI.h" ...
- Android中fragment_main.xml文件里的组件获取的问题
package com.dhy.phonedial; import android.app.Activity; import android.app.Fragment; import android. ...
- freemarker if..else.. 的使用
FreeMarker是一款模板引擎,今天在做Pad端的时候正好用到,用法非常简单: 在xml配置页面的文件中,直接使用 <#if 1=1> //条件成立要显示的内容 </#if> ...
- 如何判断Fragment是否对用户可见
背景 最近在开发中遇到了一个问题.我们的app需要统计用户的页面路径,也就是用户使用各个页面的情况.这就需要在不同的页面跳入和跳出时记录下来.但是我们的app主要是由Fragment构成的.而在不同的 ...
- NP-难题
所谓NP-难题,在给定的一个信息系统中,假设研究对象书目为m,属性书目为n,则要考察的属性集P的一个子集是否为最小子集,要进行n*m*m次的比较.而n个属性可构成2的n次方个子集,这些子集都有可能是最 ...
- android 高德地图API 之 java.lang.UnsatisfiedLinkError: Couldn't load amapv3: findLibrary returned null错误
错误场景: 运行android app时,在运行到调用高德地图API时,出现 “java.lang.UnsatisfiedLinkError: Couldn't load amapv3: findLi ...
- Difference Between XML and XAML.
XML, or Extensible Markup Language, is a subset of the more complex SGML (Standard Generalized Mark ...
- Windows的计划任务
阅读目录 一:什么是Windows的计划任务? 二:如何设置计划任务 三:高级设置计划任务 一:什么是Windows的计划任务? 在日常的工作中,我们都有一些固定的或临时性的工作,而每次在爱机前一坐, ...
- iis6 下发布MVC2项目的方法
1.安装MVC2运行库,否则会出现错误 [以下转载]http://blog.csdn.net/xw13106209/article/details/6323695 错误:”未能加载文件或程序集“Sys ...