坐标DP 小奇的矩阵(matrix)
来源:互联网 发布:网络攻防教育培训 编辑:程序博客网 时间:2024/04/27 16:29
问题 B: 小奇的矩阵(matrix)
时间限制: 1 Sec 内存限制: 256 MB
提交: 95 解决: 34
[提交][状态]
题目描述
【题目背景】
小奇总是在数学课上思考奇怪的问题。
【问题描述】
给定一个n*m的矩阵,矩阵中的每个元素aij为正整数。
接下来规定
1.合法的路径初始从矩阵左上角出发,每次只能向右或向下走,终点为右下角。
2.路径经过的n+m-1个格子中的元素为A1,A2…A(n+m-1),Aavg为Ai的平均数,路径的V值为(n+m-1)*∑(Ai-Aavg) ^2
(1<=i<=n+m-1)
求V值最小的合法路径,输出V值即可,有多组测试数据。
【输入格式】
第一行包含一个正整数T,表示数据组数。
对于每组数据:
第一行包含两个正整数n和m,表示矩阵的行数和列数。
接下来n行,每行m个正整数aij,描述这个矩阵。
【输出格式】
对于每次询问,输出一行一个整数表示要求的结果
【样例输入】
1
2 2
1 2
3 4
【样例输出】
14
【数据范围】
对于30%的数据 n<=10,m<=10
有另外40%的数据 n<=15 m<=15,矩阵中的元素不大于5
对于100%的数据 T<=5,n<=30,m<=30,矩阵中的元素不大于30
我貌似几个月没打过坐标DP了。。。
把那个式子化简一下就是(n+m-1)*∑(ai^2)-(∑ai)^2
但这个式子的值在走到一半时并无法确定是不是最优。但是ai<=30,加和最大只有1000几,那么把f数组加一维,枚举当前的sigma是多少就行了。最后算一遍。O(N^2*S)
#include <cstdlib>#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;int read(){ int sum=0,f=1;char x=getchar(); while(x<'0'||x>'9'){if(x=='-')f=-1;x=getchar();} while(x>='0'&&x<='9'){sum=(sum<<1)+(sum<<3)+x-'0';x=getchar();} return sum*f;}int t,n,m,g,a[35][35],f[2005][35][35],ans;int main(){ t=read(); while(t--) { memset(f,-1,sizeof(f)); n=read();m=read();g=m+n-1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) a[i][j]=read(); f[a[1][1]][1][1]=a[1][1]*a[1][1]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) for(int k=a[i][j];k<=1500;k++) { if(i==1&&j==1)continue; if(f[k-a[i][j]][i-1][j]!=-1) f[k][i][j]=f[k-a[i][j]][i-1][j]+a[i][j]*a[i][j]; if(f[k-a[i][j]][i][j-1]!=-1) { if(f[k][i][j]==-1)f[k][i][j]=f[k-a[i][j]][i][j-1]+a[i][j]*a[i][j]; else f[k][i][j]=min(f[k][i][j],f[k-a[i][j]][i][j-1]+a[i][j]*a[i][j]); } } int ans=2000000000; for(int i=0;i<=1500;i++) { if(f[i][n][m]==-1)continue; ans=min(ans,f[i][n][m]*g-i*i); } printf("%d\n",ans); }}
阅读全文
0 0
- 坐标DP 小奇的矩阵(matrix)
- 小奇的矩阵 DP
- 【bzoj4547】【小奇的集合】【矩阵乘法】
- 树DP 小奇的仓库(warehouse)
- 【BZOJ4547】【HDU5171】小奇的集合,暴力+矩阵乘法
- [BZOJ]4547: Hdu5171 小奇的集合 矩阵乘法
- 【jozj5228】【GDOI2018模拟7.14】【小奇的集合】【矩阵乘法】
- bzoj 4547: Hdu5171 小奇的集合 矩阵乘法
- BZOJ4550 小奇的博弈 【Nimk游戏 + dp + 组合数】
- 颜色矩阵(ColorMatrix)和坐标变换矩阵(Matrix)
- bzoj 4547: Hdu5171 小奇的集合 (矩阵乘法+递推)
- 【bzoj 4547】【Hdu 5171】小奇的集合(找规律+矩阵快速幂)
- 【BZOJ4548】小奇的糖果
- BZOJ4548 小奇的糖果
- 小奇的数列 Seq
- [bzoj4550] 小奇的博弈
- 【BZOJ4547】小奇的集合
- [JZOJ5229] 小奇的糖果
- 51nod-1154-回文串划分
- 移动端列表长按后上下拖动进行排序
- Mysql中 char 和 varchar 的区别
- 2012
- centos-7.3安装mariadb-server(二进制)
- 坐标DP 小奇的矩阵(matrix)
- FPGA基础知识之2——片内资源
- mipmap全解析
- 机器学习概念总结笔记(一)——机器学习算法分类、最小二乘回归、岭回归、LASSO回归
- Java 高阶 —— try/catch
- Android学习-Intent实现页面的跳转
- (十一)线索二叉树的创建和遍历(中序)
- 谢尔宾斯基三角(Sierpinski triangle)
- viewpager实现启动页面的无限滑动、可点击导航点(导航点定位)(简单易懂)