题目背景

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


题目描述

给定一个$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$分。


代码时刻

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n,m;
  4. int Map[50][50];
  5. int dp[50][50][2000];
  6. int ans,maxn;
  7. void pre_work()
  8. {
  9. ans=1<<30;
  10. memset(dp,0x3f,sizeof(dp));
  11. }
  12. int main()
  13. {
  14. int T;
  15. scanf("%d",&T);
  16. while(T--)
  17. {
  18. pre_work();
  19. scanf("%d%d",&n,&m);
  20. for(int i=1;i<=n;i++)
  21. for(int j=1;j<=m;j++)
  22. scanf("%d",&Map[i][j]);
  23. dp[1][1][Map[1][1]]=Map[1][1]*Map[1][1];
  24. for(int i=1;i<=n;i++)
  25. for(int j=1;j<=m;j++)
  26. for(int k=Map[i][j];k<=(n+m-1)*30;k++)
  27. 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]);
  28. for(int i=Map[n][m];i<=(n+m-1)*30;i++)
  29. if(dp[n][m][i]<1061109567)
  30. ans=min(ans,dp[n][m][i]*(n+m-1)-i*i);
  31. printf("%d\n",ans);
  32. }
  33. return 0;
  34. }

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. Looper,Handler, MessageQueue

    Looper Looper是线程用来运行消息循环(message loop)的类.默认情况下,线程并没有与之关联的Looper,可以通过在线程中调用Looper.prepare() 方法来获取,并通过 ...

  2. Selenium WebDriver Log4j打印执行日志

    在自动化测试脚本的执行过程中,使用log4j在日志文件中打印执行日志,用于监控和后续调试脚本. Log4j.xml 文件 <log4j:configuration xmlns:log4j=&qu ...

  3. 命令行下DEBIAN7时间错误的问题(转)

    Debian下的时间设置问题 Debian系统经常会遇到时间不准的情况,以下几个步骤可让您轻松摆脱烦恼: 1.设定正确的时区编辑/etc/timezone,写入Asia/Shanghai 2.使用da ...

  4. c#访问webapi以及获取

    提交post #region XML方式提交        public static void XML() {            HttpWebRequest wReq = (HttpWebRe ...

  5. 小Z的袜子(题解)(莫队)

    小Z的袜子(题解)(莫队) Junlier良心莫队 题目 luoguP1494 [国家集训队]小Z的袜子 code #include<bits/stdc++.h> #define lst ...

  6. 物流运输(最短路+dp)

    这道题是相当的火,但是在tyher的讲解下我一遍就AC了!!! Part 1 理解题目 从第一天到最后一天,总会有一些点莫名其妙地走不了,所以导致我们不能按照上一次的最短路一直运输得到最少费用,而需要 ...

  7. #python# error:UnicodeEncodeError: 'latin-1' codec can't encode character '\u2026' in position 30: ordinal not in range(256)

    headers={ 'Referer':'https://www.lagou.com/jobs/lis-rds=&fromSearch=true&suginput=', 'User-A ...

  8. SQL SERVER添加表注释、字段注释

    --为字段添加注释 --Eg. execute sp_addextendedproperty 'MS_Description','字段备注信息','user','dbo','table','字段所属的 ...

  9. mybatis where 中in的使用

    当我们使用mybatis时,在where中会用到 in 如: where name in ('Jana','Tom'); 我们可以在sql中直接写 name in ('Jana','Tom') 或者 ...

  10. 【知识强化】第五章 中央处理器 5.1 CPU的功能和基本结构

    那么在前四章我们已经把数据的表示和运算,存储系统和指令系统都已经给大家讲完了.那么从这一章开始,我们将要讲解中央处理器的内容.那么这一部分内容我们就进入到我们计算机组成原理的一个深水区,它是我们计算机 ...