题目意思:

给n*m的矩阵,每个格子有个数,A从(1,1)出发只能向下或右走,终点为(n,m),B从(n,1)出发只能向上或右走,终点为(1,m)。两个人的速度不一样,走到的格子可以获的该格子的数,两人相遇的格子上的数两个人都不能拿。求A和B能拿到的数的总和的最大值。

n,m<=1000

解题思路:

先预处理出每个格子到四个角落格子的路径最大数值,

然后枚举两个人相遇的交点格子,枚举A、B的进来和出去方式,求最大值即可。

注意边界情况。

#include<stdio.h>
#include<algorithm>
using namespace std;
const int MAX = ;
int ma[MAX][MAX];
int Mrd[MAX][MAX],Mur[MAX][MAX],Mld[MAX][MAX],Mul[MAX][MAX];
int n,m;
int i,j;
void print(long long a[][MAX])
{
for(i=;i<=n;i++)
{
for(j=;j<=m;j++)
{
printf("%I64d ",a[i][j]);
}
printf("\n");
}
printf("\n");
}
void Init()
{
for(i=;i<=m;i++)
Mrd[][i]=ma[][i]+Mrd[][i-];
for(j=;j<=n;j++)
Mrd[j][]=ma[j][]+Mrd[j-][];
for(i=;i<=n;i++)
{
for(j=;j<=m;j++)
{
Mrd[i][j]=ma[i][j]+max(Mrd[i-][j],Mrd[i][j-]);
//printf("%d ",Mrd[][]);
}
} for(i=;i<=m;i++)
Mur[n][i]=ma[n][i]+Mur[n][i-];
for(j=n;j>=;j--)
Mur[j][]=ma[j][]+Mur[j+][];
for(i=n-;i>=;i--)
{
for(j=;j<=m;j++)
{
Mur[i][j]=ma[i][j]+max(Mur[i+][j],Mur[i][j-]);
}
} for(i=m;i>=;i--)
Mld[][i]=ma[][i]+Mld[][i+];
for(j=;j<=n;j++)
Mld[j][m]=ma[j][m]+Mld[j-][m];
for(i=;i<=n;i++)
{
for(j=m-;j>=;j--)
{
Mld[i][j]=ma[i][j]+max(Mld[i][j+],Mld[i-][j]);
}
} for(i=m;i>=;i--)
Mul[n][i]=ma[n][i]+Mul[n][i+];
for(j=n;j>=;j--)
Mul[j][m]=ma[j][m]+Mul[j+][m];
for(i=n-;i>=;i--)
{
for(j=m-;j>=;j--)
{
Mul[i][j]=ma[i][j]+max(Mul[i+][j],Mul[i][j+]);
}
}
}
int main()
{
while(scanf("%d %d",&n,&m)!=EOF)
{
for(i=;i<=n;i++)
for(j=;j<=m;j++)
scanf("%d",&ma[i][j]);
Init();
//print(Mrd);
//print(Mur);
//print(Mld);
//print(Mul);
int ans=,tmp;
for(i=;i<n;i++)
{
for(j=;j<m;j++)
{
tmp=Mrd[i-][j]+Mur[i][j-]+Mld[i][j+]+Mul[i+][j];
ans=max(tmp,ans);
tmp=Mrd[i][j-]+Mur[i+][j]+Mld[i-][j]+Mul[i][j+];
ans=max(tmp,ans);
}
}
printf("%d\n",ans);
}
return ;
}

Codeforces 429B B. Working out的更多相关文章

  1. CodeForces 429B Working out DP

    E - Working out Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Su ...

  2. Codeforces 429B Working out

    http://codeforces.com/contest/429/problem/B 题意:一个从左下到右上,一个从左上到右下,要求只相交一次,求整个路径和的最大值 思路:发现可以枚举交点,然后算到 ...

  3. Codeforces 429B Working out(递推DP)

    题目链接:http://codeforces.com/problemset/problem/429/B 题目大意:两个人(假设为A,B),打算健身,有N行M列个房间,每个房间能消耗Map[i][j]的 ...

  4. CODEFORCES 429B 动态规划

    http://codeforces.com/problemset/problem/429/B 可以参考这篇文章: http://blog.csdn.net/pure_lady/article/deta ...

  5. Codeforces 429B Working out:dp【枚举交点】

    题目链接:http://codeforces.com/problemset/problem/429/B 题意: 给你一个n*m的网格,每个格子上有一个数字a[i][j]. 一个人从左上角走到右下角,一 ...

  6. CodeForces 429B Working out 动态规划

    Description Summer is coming! It's time for Iahub and Iahubina to work out, as they both want to loo ...

  7. CodeForces 429B

    Working out Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u   Desc ...

  8. CodeForces 429B【dp】

    题意: 在一个n*m的矩阵中有两只虫子,一只从左上角向右下角移动,另外一只从左下角向右上角移动. 要求: 1.第一只虫子每次只能向左或者向下移动一格,另外一只只能向上或者向右移动一格. 2.两只虫子的 ...

  9. 【Codeforces 429B】Working out

    [链接] 我是链接,点我呀:) [题意] 两个人,一个人在左上角,一个人在左下角. 左上角要到右下角去 左下角要到右上角去 只能走到相邻的格子(不能往回走,即一个往右下,一个往右上走) 要求这两个人必 ...

随机推荐

  1. Spring Aware接口---BeanNameAware BeanFactoryAware ApplicationContextAware

    前言 对于应用程序来说,应该尽量减少对spring api的耦合程度,然后有时候为了运用spring提供的一些功能,有必要让bean了解spring容器对其管理的细节信息,如让bean知道在容器中是以 ...

  2. PADS Logic 脚本的 Fields 一个对象记录

    PADS Logic 脚本的 Fields 一个对象记录 PADS Laogic 有一个非常棒的脚本功能,可以导出所以元件. 我目前是把脚本绑定到 Ctrl+S 上,在保存时自动导出 txt 文件,方 ...

  3. 记录一下 C51 里的位运算

    记录一下 C51 里的位运算 一篇上个世纪的文章<单片机的C语言中位操作用法>1 今天看到一个这样的运算,这相当于清了 XICFG. #define INT1IS1 0x80 #defin ...

  4. selenium - css 定位

    前言: CSS(Cascading Style Sheets)是一种语言,它被用来描述 HTML 和 XML 文档的表现. CSS 使用选择器来为页面元素绑定属性.这些选择器可以被 selenium ...

  5. eclipse配置storm1.1.0开发环境并本地跑起来

    storm的开发环境搭建比hadoop(参见前文http://www.cnblogs.com/wuxun1997/p/6849878.html)简单,无需安装插件,只需新建一个java项目并配置好li ...

  6. poj1011---DFS

    题目的大意是给了你有限个棍子以及每个棍子的长度,而且所有的棍子都是由有限个长度相同的棍子截断得到的,让你求被截棍子的最小长度 搜索剪枝神题,做的我够呛 提供一个比较好的解题报告  http://www ...

  7. CAN总线过载帧

    过载帧 过载帧与主动错误帧具有相同的格式.但是,过载帧只能在帧间间隔产生,因此可通过这种方式区分过载帧和错误帧(错误帧是在帧传输时发出的).过载帧由两个字段组成,即过载标志和随后的过载定界符.过载标志 ...

  8. 庖丁解牛-----Live555源码彻底解密(根据MediaServer讲解Rtsp的建立过程)

    live555MediaServer.cpp服务端源码讲解 int main(int argc, char** argv) { // Begin by setting up our usage env ...

  9. linux 下 进程和线程的区别

    1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是C ...

  10. BigDecimal进行精确运算demo工具类

    package com.js.ai.modules.pointwall.interfac; import java.math.BigDecimal; public class TestDigDecim ...