题目背景

小奇总是在数学课上思考奇怪的问题。


题目描述

给定一个$n\times m$的矩阵,矩阵中的每个元素$a_{i,j}$为正整数。
接下来规定:
    $1.$合法的路径初始从矩阵左上角出发,每次只能向右或向下走,终点为右下角。
    $2.$路径经过的$n+m-1$个格子中的元素为$A_1,A_2...A_{(n+m-1)}$,$Aavg$为$A_i$的平均数,路径的$V$值为$(n+m-1)\times \sum \limits_{i=1}^{n+m-1}{(A_i-Advg)}^2$
求$V$值最小的合法路径,输出$V$值即可,有多组测试数据。


输入格式

第一行包含一个正整数$T$,表示数据组数。
对于每组数据:
第一行包含两个正整数$n$和$m$,表示矩阵的行数和列数。
接下来$n$行,每行$m$个正整数$a_{i,j}$,描述这个矩阵。


输出格式

对于每次询问,输出一行一个整数表示要求的结果。


样例

样例输入:

1
2 2
1 2
3 4

样例输出:

14


数据范围与提示

对于$30\%$的数据$n\leqslant 10$,$m\leqslant 10$。
有另外$40\%$的数据$n\leqslant 15$,$m\leqslant 15$,矩阵中的元素不大于$5$。
对于$100\%$的数据$T\leqslant 5$,$n\leqslant 30$,$m\leqslant 30$,矩阵中的元素不大于$30$。


题解

又是令人头疼的数学,而数学题就得化式子(但是你说你知道方差公式那我也没辙)。

那就来化式子:

$(n+m-1)\sum{(A_i-Aavg)}^2$
$=|(n+m-1)\times \sum({A_i}^2-2\times A_i\times Aavg+{Aavg}^2)|$
$=|(n+m-1)\times \sum{A_i}^2-(n+m-1)\times 2\times \sum (A_i\times Aavg)+(n+m-1)\times \sum{Aavg}^2|$
$=|(n+m-1)\times \sum{A_i}^2-(n+m-1)\times 2\times \frac{\sum{A_i}^2}{n+m-1}+(n+m-1)\times \frac{{Aavg}^2}{n+m-1}|$
$=|-(n+m-1)\times \sum{A_i^2}-{Aavg}^2|$
$=|{Aavg}^2-(n+m-1)\times \sum{A_i}^2|$

我们又发现矩阵中元素不大于$30$,既然它出现,必然有它的意义。

考虑从这里入手,我们现在就来考虑$DP$,定义dp[i][j][k]表示到点(i,j),和为k,平方和的最小值。

那么状态转移方程即为:$dp[i][j][k]=\min(dp[i-1][j][k-x[i][j]],dp[i][j-1][k-x[i][j]])+x[i][j]\times x[i][j]$

而我们统计答案的时候只需要找$\min(dp[n][m][i]\times (n+m-1)-i\times i)$即可。

时间复杂度:$\Theta(30\times n\times m\times (n+m))$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
int n,m;
int Map[50][50];
int dp[50][50][2000];
int ans,maxn;
void pre_work()
{
ans=1<<30;
memset(dp,0x3f,sizeof(dp));
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
pre_work();
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&Map[i][j]);
dp[1][1][Map[1][1]]=Map[1][1]*Map[1][1];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int k=Map[i][j];k<=(n+m-1)*30;k++)
dp[i][j][k]=min(dp[i][j][k],min(dp[i-1][j][k-Map[i][j]],dp[i][j-1][k-Map[i][j]])+Map[i][j]*Map[i][j]);
for(int i=Map[n][m];i<=(n+m-1)*30;i++)
if(dp[n][m][i]<1061109567)
ans=min(ans,dp[n][m][i]*(n+m-1)-i*i);
printf("%d\n",ans);
}
return 0;
}

rp++

[CSP-S模拟测试]:小奇的矩阵(matrix)(DP+数学)的更多相关文章

  1. [CSP-S模拟测试]:小奇挖矿2(DP+赛瓦维斯特定理)

    题目背景 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市场,以便为飞船升级无限非概率引擎. 题目描述 现在有$m+1$个星球,从左到右标号为$0$到$n$,小奇最初 ...

  2. [CSP-S模拟测试]:小奇的仓库(warehouse)(树形DP)

    题目背景 小奇采的矿实在太多了,它准备在喵星系建个矿石仓库.令它无语的是,喵星系的货运飞船引擎还停留在上元时代! 题目描述 喵星系有$n$个星球,星球以及星球间的航线形成一棵树.从星球$a$到星球$b ...

  3. [CSP-S模拟测试]:小盆友的游戏(数学 or 找规律)

    题目传送门(内部题110) 输入格式 第一行一个整数$N$,表示小盆友的个数. 第二行$N$个整数$A_i$,如果$A_i=-1$表示$i$目前是自由身,否则$i$是$A_i$的跟班. 输出格式 一个 ...

  4. 【NOIP模拟赛】小奇的矩阵

    [题目背景] 小奇总是在数学课上思考奇怪的问题. [问题描述] 给定一个n*m的矩阵,矩阵中的每个元素aij为正整数. 接下来规定 1.合法的路径初始从矩阵左上角出发,每次只能向右或向下走,终点为右下 ...

  5. 【NOI省选模拟】小奇的花园

    「题目背景」 小奇在家中的花园漫步时,总是会思考一些奇怪的问题. 「问题描述」 小奇的花园有n个温室,标号为1到n,温室以及以及温室间的双向道路形成一棵树. 每个温室都种植着一种花,随着季节的变换,温 ...

  6. 【bzoj4550】小奇的博弈 博弈论+dp

    题目描述 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色.最左边是白色棋子,最右边 是黑色棋子,相邻的棋子颜色不同.   小奇可以移动白色棋子,提比可以移动黑色的棋子, ...

  7. [CSP-S模拟测试]:小P的2048(模拟)

    题目描述 最近,小$P$迷上了一款叫做$2048$的游戏.这块游戏在一个$n\times n$的棋盘中进行,棋盘的每个格子中可能有一个形如$2^k(k\in N^*)$的数,也可能是空的.游戏规则介绍 ...

  8. [CSP-S模拟测试]:小L的数(数位DP+模拟)

    题目传送门(内部题132) 输入格式 第一行一个整数$t$. 接下来$t$行每行一个整数$n$. 输出格式 $t$行,每行一个整数表示答案. 样例 样例输入: 41818231232691052109 ...

  9. [CSP-S模拟测试]:小P的生成树(数学+Kruskal)

    题目描述 小$P$是个勤于思考的好孩子,自从学习了最大生成树后,他就一直在想:能否将边权范围从实数推广到复数呢?可是马上小$P$就发现了问题,复数之间的大小关系并没有定义.于是对于任意两个复数$z_1 ...

随机推荐

  1. Vue混入:全局混入

    一 项目结构 二 main.js import Vue from "vue"; import App from "./App.vue"; Vue.config. ...

  2. 全文搜索 ElasticSearch

    今天突然想了解一下ES,看看有什么优势,能不能用在项目中. 说到ES就不得不了解它的底层技术-全文检索 Ref: 全文检索的基本原理 https://blog.csdn.net/wangmaohong ...

  3. Oracle基本操作练习(一)

    --创建表空间 create tablespace test datafile 'c:\test.dbf' size 100m autoextend on next 10m; --删除表空间 drop ...

  4. 学习ECMAScript标准和具体实现-JavaScript

    在NDN的JavaScript Guide里,Array和Map,Set都属于collections of data.它们的区别就是,Array是ordered by an index value,  ...

  5. Spring-Cloud-Alibaba-Nacos 目录

    Spring-Cloud-Alibaba-Nacos 目录 学习资料 Nacos 官网(https://nacos.io/zh-cn/docs/what-is-nacos.html) Nacos 程序 ...

  6. 安装go版本

    下载地址(官网):https://golang.org/dl/ 下载地址(国内):https://dl.gocn.io/ 想编译GO,必须先有一个GO的编译器. 创建GO的编译器:[root@node ...

  7. [BZOJ 4771]七彩树(可持久化线段树+树上差分)

    [BZOJ 4771]七彩树(可持久化线段树+树上差分) 题面 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点.每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i].如果c[i] ...

  8. kvm扩容home目录

    KVM虚拟磁盘扩容 1.磁盘扩容分为raw和qcow2两种扩容方式,命令相同,区别是后缀名 [root@daixuan ~]# qemu-img info /data/daixuan1.qcow2 / ...

  9. redis 持久化 哨兵 主从

    Redis搭建步骤 环境: 三台机器  centos7 关闭防火墙 selinux Redis版本 3.0.5 依赖环境 yum install gcc-c++ ruby rubygems –y 把版 ...

  10. C. Trailing Loves (or L'oeufs?) (质因数分解)

    C. Trailing Loves (or L'oeufs?) 题目传送门 题意: 求n!在b进制下末尾有多少个0? 思路: 类比与5!在10进制下末尾0的个数是看2和5的个数,那么 原题就是看b进行 ...