题目链接:http://codeforces.com/problemset/problem/429/B

题意:

  给你一个n*m的网格,每个格子上有一个数字a[i][j]。

  一个人从左上角走到右下角,一个人从左下角走到右上角,要求两条路径有且仅有一个交点。

  问你除去交点格子上的数字,路径上数字之和最大是多少。

题解:

  表示状态:

    dp[i][j][0/1/2/3] = max sum

    表示从某个角走到(i,j)这个格子,最大路径上数字之和

    0,1,2,3分别代表左上角、右上角、左下角、右下角

  找出答案:

    路径相交共有两种方式:

    

    枚举交点(i,j)。

    ans = max dp[i-1][j][0] + dp[i+1][j][3] + dp[i][j-1][2] + dp[i][j+1][1]

    ans = max dp[i-1][j][1] + dp[i+1][j][2] + dp[i][j-1][0] + dp[i][j+1][3]

  如何转移:

    四种情况分别算:

    (1)dp[i][j][0] = max dp[i-1][j][0]+a[i][j]

       dp[i][j][0] = max dp[i][j-1][0]+a[i][j]

    (2)dp[i][j][1] = max dp[i-1][j][1]+a[i][j]

       dp[i][j][1] = max dp[i][j+1][1]+a[i][j]

    (3)dp[i][j][2] = max dp[i+1][j][2]+a[i][j]

       dp[i][j][2] = max dp[i][j-1][2]+a[i][j]

    (4)dp[i][j][3] = max dp[i+1][j][3]+a[i][j]

       dp[i][j][3] = max dp[i][j+1][3]+a[i][j]

  边界条件:

    set dp = 0

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 1005 using namespace std; int n,m;
int a[MAX_N][MAX_N];
int dp[MAX_N][MAX_N][]; void read()
{
cin>>n>>m;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
cin>>a[i][j];
}
}
} void work()
{
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
dp[i][j][]=max(dp[i][j][],dp[i-][j][]+a[i][j]);
dp[i][j][]=max(dp[i][j][],dp[i][j-][]+a[i][j]);
}
}
for(int i=;i<=n;i++)
{
for(int j=m;j>=;j--)
{
dp[i][j][]=max(dp[i][j][],dp[i-][j][]+a[i][j]);
dp[i][j][]=max(dp[i][j][],dp[i][j+][]+a[i][j]);
}
}
for(int i=n;i>=;i--)
{
for(int j=;j<=m;j++)
{
dp[i][j][]=max(dp[i][j][],dp[i+][j][]+a[i][j]);
dp[i][j][]=max(dp[i][j][],dp[i][j-][]+a[i][j]);
}
}
for(int i=n;i>=;i--)
{
for(int j=m;j>=;j--)
{
dp[i][j][]=max(dp[i][j][],dp[i+][j][]+a[i][j]);
dp[i][j][]=max(dp[i][j][],dp[i][j+][]+a[i][j]);
}
}
int ans=;
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
ans=max(ans,dp[i-][j][]+dp[i+][j][]+dp[i][j-][]+dp[i][j+][]);
ans=max(ans,dp[i-][j][]+dp[i+][j][]+dp[i][j-][]+dp[i][j+][]);
}
}
cout<<ans<<endl;
} int main()
{
read();
work();
}

Codeforces 429B Working out:dp【枚举交点】的更多相关文章

  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. UVA 11825 - Hackers&#39; Crackdown 状态压缩 dp 枚举子集

    UVA 11825 - Hackers' Crackdown 状态压缩 dp 枚举子集 ACM 题目地址:option=com_onlinejudge&Itemid=8&page=sh ...

  4. [Codeforces 1201D]Treasure Hunting(DP)

    [Codeforces 1201D]Treasure Hunting(DP) 题面 有一个n*m的方格,方格上有k个宝藏,一个人从(1,1)出发,可以向左或者向右走,但不能向下走.给出q个列,在这些列 ...

  5. [Luogu P3959] 宝藏 (状压DP+枚举子集)

    题面 传送门:https://www.luogu.org/problemnew/show/P3959 Solution 这道题的是一道很巧妙的状压DP题. 首先,看到数据范围,应该状压DP没错了. 根 ...

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

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

  7. codeforces 629C Famil Door and Brackets (dp + 枚举)

    题目链接: codeforces 629C Famil Door and Brackets 题目描述: 给出完整的括号序列长度n,现在给出一个序列s长度为m.枚举串p,q,使得p+s+q是合法的括号串 ...

  8. Codeforces Round #552 (Div. 3) EFG(链表+set,dp,枚举公因数)

    E https://codeforces.com/contest/1154/problem/E 题意 一个大小为n(1e6)的数组\(a[i]\)(n),两个人轮流选数,先找到当前数组中最大的数然后选 ...

  9. Codeforces Round #157 (Div. 2) D. Little Elephant and Elections(数位DP+枚举)

    数位DP部分,不是很难.DP[i][j]前i位j个幸运数的个数.枚举写的有点搓... #include <cstdio> #include <cstring> using na ...

随机推荐

  1. oracle中sqlldr工具使用时注意事项

    1.命令写在一行:如,sqlldr sh/&sh_pass@&connect_string control=&ctl_file data=&dat_file log=& ...

  2. 集合第七发练习之利用ArrayList做栈、队列

    栈:后进先出. 队列:先进先出. 利用这个核心思想,结合集合的add和remove方法做的栈和队列如下代码所示: 主类(t1()和t2()分别演栈和队列):   package cn.hncu.myS ...

  3. Live555 中的客户端动态库.so的调用方式之一 程序中调用

    1.  打开动态链接库:    #include <dlfcn.h>    void *dlopen(const char *filename, int flag);    该函数返回操作 ...

  4. .net Socket编程

    1.         什么是TCP/IP.UDP?2.         Socket在哪里呢?3.         Socket是什么呢?4.         你会使用它们吗? 什么是TCP/IP.U ...

  5. 中国程序员如何去 Facebook 工作?

    1.在Facebook,可以选择哪里工作? Facebook 在内地确实没有 Office ,但可以在https://www.facebook.com/careers/?ref=pf#location ...

  6. thinkPHP5.0的添加(C操作)

    首先创建表单: 后台表单用的是layui框架(模块化前端框架),有自己的表单验证,推荐大家使用,在这里表单我就不再贴代码了 其次后台处理: //接收数据并入库 $data = $this->re ...

  7. 使用UIImageView展现来自网络的图片

    本文转载至 http://www.cnblogs.com/chivas/archive/2012/05/21/2512324.html UIImageView:可以通过UIImage加载图片赋给UII ...

  8. Just a Hook(线段树)

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. Inside a super fast CSS engine: Quantum CSS (aka Stylo)

    https://hacks.mozilla.org/2017/08/inside-a-super-fast-css-engine-quantum-css-aka-stylo/?utm_source=d ...

  10. 【python】-- 类的装饰器方法、特殊成员方法

    装饰器方法 类的另外的特性,装饰器方法:静态方法(staticmethod).类方法(classmethod).属性方法(property) 一.静态方法 在方法名前加上@staticmethod装饰 ...