题意:给定n,m<=300的矩阵,然后求一个长宽大于2的矩形,使得是从左上角位置开始逆时针绕边框一圈的时间最少。时间的计算是:给定3个数tu,tp, td,路径上数字增加为tu,相等为tp否则为td。

思路:直接预处理出4个数组,然后直接暴力。n4的方法。但是常数小可以4000+ms过。

还有一种n3logn的方法。。

具体是固定右下角,然后枚举右上角,然后通过一个通过地推维护一个前缀,二分查找。。

不过常数肯定比暴力大估计快不了多少。。

code:

 #include <bits/stdc++.h>
#define M0(x) memset(x, 0, sizeof(x))
#define repf(i, a, b) for(int i = (a); i <= (b); ++i)
#define repd(i, a, b) for(int i = (a); i >= (b); --i)
using namespace std;
int U[][], D[][], L[][], R[][], a[][];
int n, m;
int tp, tu, td, t; inline int f(const int& a, const int& b){
return a == b ? tp : (a > b ? tu : td);
} void init(){
scanf("%d%d%d", &tp, &tu, &td);
M0(U), M0(D), M0(L), M0(R), M0(a);
repf(i, , n) repf(j, , m) scanf("%d", &a[i][j]);
repf(i, , n) repf(j, , m){
D[i][j] = D[i-][j] + f(a[i][j], a[i-][j]);
R[i][j] = R[i][j-] + f(a[i][j], a[i][j-]);
}
repd(i, n, ) repd(j, m, ){
U[i][j] = U[i+][j] + f(a[i][j], a[i+][j]);
L[i][j] = L[i][j+] + f(a[i][j], a[i][j+]);
}
} void solve(){
int ansd = 0x3fffffff, ans = ;
int lx, ly, rx, ry, d;
int tmp;
for (int x = ; x <= n; ++x)
for (int y = ; y <= m; ++y)
for (int x1 = x + ; x1 <= n; ++x1)
for (int y1 = y + ; y1 <= m; ++y1){
tmp = D[x1][y1] - D[x][y1] + U[x][y] - U[x1][y];
tmp += (R[x][y1] - R[x][y] + L[x1][y] - L[x1][y1]);
d = abs(tmp - t);
if (d < ansd || (d == ansd && tmp < ans)){
lx = x, ly = y;
rx = x1, ry = y1;
ansd = d, ans = tmp;
}
}
// cout <<ans << endl;
printf("%d %d %d %d\n", lx, ly, rx, ry);
} int main(){
// freopen("a.in", "r", stdin);
while (scanf("%d%d%d", &n, &m, &t) != EOF){
init();
solve();
}
return ;
}

最新文章

  1. Android 监听返回键、HOME键
  2. 在数据库中如果组合主键(假设为stuID和stuName)存在则更新,不存在则新增
  3. VisualStudio基本使用(1)-显示行号
  4. Python 学习之进制与编码
  5. Leetcode: Implement Trie (Prefix Tree) &amp;&amp; Summary: Trie
  6. 计算机程序和C++语言简介
  7. 应用程序连接oracle rac
  8. Java IO学习笔记
  9. LINQ to SQL 运行时动态构建查询条件
  10. 80端口被占用 PID = 4解决办法
  11. ios的Ping++支付接入步骤-b
  12. nexus5 root教程
  13. 管理TEMP数据
  14. input元素有padding间距,所以使用box-sizing来保持宽度不超出父元素
  15. 部署Redis主-从
  16. 在ASP.NET 5应用程序中的跨域请求功能详解
  17. AutoTile 自动拼接(三) 学习与实践
  18. linux服务器查看redis版本:
  19. win10 uwp 模拟网页输入
  20. JavaScript基础视频教程总结(011-020章)

热门文章

  1. canvas画随机闪烁的星星
  2. MySQL计算销售员昨日各指标综合得分_20161206
  3. CLR VIA C#事件
  4. jqGrid学习笔记(二)
  5. js 和 c# 方法互调
  6. 【BZOJ2595】游览计划(状压DP,斯坦纳树)
  7. Selenium2+python自动化22-发送各种类型附件邮件
  8. Selenium2+python自动化3-解决pip使用异常
  9. zzulioj 1907小火山的宝藏交易(dfs记忆化搜索)
  10. Python:面向对象