题目传送门

题意:从(1, 1)走到(n, m),每次往右或往下走,问(N+M−1)∑(Ai−Aavg)2 的最小值

分析:展开式子得到(N+M−1)∑(Ai2) - (∑(Ai))2的最小值。用普通的搜索要不超时要不爆内存,用dp。注意到和的值很小,最多59*30,所以dp[i][j][k]表示当走到(i, j)点时和为k的最小的平方和,两个方向转移。

/************************************************
* Author :Running_Time
* Created Time :2015/9/28 星期一 08:16:33
* File Name :I.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 33;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-8;
int dp[N][N][N*2*N];
int a[N][N]; int main(void) {
int T, cas = 0; scanf ("%d", &T);
while (T--) {
int n, m; scanf ("%d%d", &n, &m);
for (int i=1; i<=n; ++i) {
for (int j=1; j<=m; ++j) {
scanf ("%d", &a[i][j]);
}
}
int S = 59 * 30;
memset (dp, INF, sizeof (dp));
dp[1][1][a[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=0; k<=S; ++k) {
int &u = dp[i][j][k];
if (u == INF) continue;
if (i + 1 <= n) {
int &v = dp[i+1][j][k+a[i+1][j]];
v = min (v, u + a[i+1][j] * a[i+1][j]);
}
if (j + 1 <= m) {
int &v = dp[i][j+1][k+a[i][j+1]];
v = min (v, u + a[i][j+1] * a[i][j+1]);
}
}
}
}
int ans = INF;
for (int i=0; i<=S; ++i) {
if (dp[n][m][i] == INF) continue;
ans = min (ans, (n + m - 1) * dp[n][m][i] - i * i);
}
printf ("Case #%d: %d\n", ++cas, ans);
} return 0;
}

  

最新文章

  1. FFT小总结
  2. 远程联机linux主机
  3. Java NIO:浅析I/O模型
  4. 远程连接mysql报错【1130 -host 'localhost' is not allowed to connect to this mysql server】
  5. php yii框架使用MongoDb
  6. 最短路径之Dijkstra算法及实例分析
  7. JAVA之Exchanger
  8. Wireshark网络抓包(一)——数据包、着色规则和提示
  9. 原生 JS 实现一个瀑布流插件
  10. duilib消息类型
  11. 用google map实现周边搜索功能
  12. shiro 分布式缓存用户信息
  13. Codeforces ECR50 div2题解
  14. 洛谷P2613有理数取余
  15. Promise,Generator(生成器),async(异步)函数
  16. 【Unity】3.3 用3ds Max 2015制作模型并将其导入到Unity
  17. English trip -- VC(情景课)3 C Do you have a sister?(maple verstion)
  18. php类模块引擎PDO操作MySQL数据库简单阐述
  19. Python使用logging来记录日志
  20. 安装 VMware Tools

热门文章

  1. EF中 Code-First 方式的数据库迁移
  2. java序员必备的十大技能
  3. Cats transport(codeforces311B)(斜率优化)
  4. mongodb的安装、配置、常见问题
  5. java map 装入list
  6. (linux)likely和unlikely函数
  7. LoadRunner 技巧之 IP欺骗
  8. MYSQL进阶学习笔记二:MySQL存储过程和局部变量!(视频序号:进阶_4-6)
  9. 书写优雅的shell脚本(四) - kill命令的合理使用
  10. 微信小程序服务类目大坑:特殊行业服务类目所需资质材料