Codeforces 429B Working out:dp【枚举交点】
题目链接: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:
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #define MAX_N 1005 5 6 using namespace std; 7 8 int n,m; 9 int a[MAX_N][MAX_N]; 10 int dp[MAX_N][MAX_N][4]; 11 12 void read() 13 { 14 cin>>n>>m; 15 for(int i=1;i<=n;i++) 16 { 17 for(int j=1;j<=m;j++) 18 { 19 cin>>a[i][j]; 20 } 21 } 22 } 23 24 void work() 25 { 26 memset(dp,0,sizeof(dp)); 27 for(int i=1;i<=n;i++) 28 { 29 for(int j=1;j<=m;j++) 30 { 31 dp[i][j][0]=max(dp[i][j][0],dp[i-1][j][0]+a[i][j]); 32 dp[i][j][0]=max(dp[i][j][0],dp[i][j-1][0]+a[i][j]); 33 } 34 } 35 for(int i=1;i<=n;i++) 36 { 37 for(int j=m;j>=1;j--) 38 { 39 dp[i][j][1]=max(dp[i][j][1],dp[i-1][j][1]+a[i][j]); 40 dp[i][j][1]=max(dp[i][j][1],dp[i][j+1][1]+a[i][j]); 41 } 42 } 43 for(int i=n;i>=1;i--) 44 { 45 for(int j=1;j<=m;j++) 46 { 47 dp[i][j][2]=max(dp[i][j][2],dp[i+1][j][2]+a[i][j]); 48 dp[i][j][2]=max(dp[i][j][2],dp[i][j-1][2]+a[i][j]); 49 } 50 } 51 for(int i=n;i>=1;i--) 52 { 53 for(int j=m;j>=1;j--) 54 { 55 dp[i][j][3]=max(dp[i][j][3],dp[i+1][j][3]+a[i][j]); 56 dp[i][j][3]=max(dp[i][j][3],dp[i][j+1][3]+a[i][j]); 57 } 58 } 59 int ans=0; 60 for(int i=2;i<n;i++) 61 { 62 for(int j=2;j<m;j++) 63 { 64 ans=max(ans,dp[i-1][j][0]+dp[i+1][j][3]+dp[i][j-1][2]+dp[i][j+1][1]); 65 ans=max(ans,dp[i-1][j][1]+dp[i+1][j][2]+dp[i][j-1][0]+dp[i][j+1][3]); 66 } 67 } 68 cout<<ans<<endl; 69 } 70 71 int main() 72 { 73 read(); 74 work(); 75 }
转载于:https://www.cnblogs.com/Leohh/p/8191478.html
Codeforces 429B Working out:dp【枚举交点】相关推荐
- [CodeForces 332B]Maximum Absurdity[DP]
题目链接: [CodeForces 332B]Maximum Absurdity[DP] 题意分析: 寻找两个不重叠的长度为k的子串,使得它们之和最大. 解题思路: 第一想法是,处理出从这个点开始,长 ...
- Codeforces 919D Substring (拓扑图DP)
Codeforces 919D Substring (拓扑图DP) 手动博客搬家: 本文发表于20180716 10:53:12, 原地址https://blog.csdn.net/suncongbo ...
- 【CodeForces 1042B --- Vitamins】DP+位运算
[CodeForces 1042B --- Vitamins]DP+位运算 题目来源:点击进入[CodeForces 1042B - Vitamins] Description Berland sho ...
- codeforces数学1600day6[CodeForces - 1029C多区间交+枚举,CodeForces 992C[数学公式推导],CodeForces 992B[质因数分解+暴力枚举]]
A - Maximal Intersection CodeForces - 1029C 题目大意:就是给你n个区间,这n个区间有公共的区间长度为x,现在叫你从这n个区间中删掉一个使得x最大化. 解题思 ...
- Codeforces 1322D Reality Show (DP)
题目链接 https://codeforces.com/contest/1322/problem/D 题面写得非常模糊,很容易读错题,建议参考翻译:https://www.luogu.com.cn/p ...
- CodeForces - 1579G Minimal Coverage(dp)
题目链接:点击查看 题目大意:给出 nnn 个长度不同的木棍.设第 i−1i-1i−1 次放置木棍后的终点为 xxx,那么第 iii 个木棍有且仅有两种放置方法: 放到 [x+1,x+a[i]][x+ ...
- CodeForces - 1562E Rescue Niwen!(dp)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串 sss,将其子串按顺序展开成序列,即 {s1,s1s2,⋯,s1s2-sn,s2,s2s3,s2s3-sn,s3,s3s4,⋯,sn−1 ...
- CodeForces - 1551E Fixed Points(dp)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,需要求出删掉最少的数字,使得剩下的数字至少有 kkk 个位置满足 a[i]=ia[i]=ia[i]=i 成立 题目分析:看完数据范围不难想 ...
- 图论500题 ---- 并查集+树形dp+枚举 求解动态的最小生成树 HDU 4126
题目链接 题目大意: 给一图,n个点,m条边,每条边有个花费,给出q条可疑的边,每条边有新的花费,每条可疑的边出现的概率相同,求不能经过原来可疑边(可以经过可疑边新的花费构建的边),注意每次只出现一条 ...
最新文章
- win7 64位系统连接xp 32位共享打印机办法
- 黄海广老师《机器学习》慕课第二轮1月14日开课了!
- zkui:好用的zookeeper ui工具
- 《Python编程初学者指南》——1.2 Python简介
- ctsc2009 移民站选址
- MySQL高可用--MGR入门(4)异常恢复
- OEA 中的业务控制器设计模式
- mysql优化方面的面试题
- cst和ansys_请教一下cst、ansoft、ansys几种电磁计算软件的异同
- 【小程序】零基础微信小程序开发+实战项目
- spark on k8s:apache YuniKorn(Incubating)的助力
- [日常技能]手机投屏到电视的5种方法
- java基于sptingboot+vue的校园疫情防控系统 elementui
- 高德地图添加瓦片图层
- 《无懈可击的Web设计》_灵活的文字
- 数据库连接字符串的设置与读取
- 浅析区块链应用系统——区块链追踪溯源应用
- Codesys代码助手
- 《Activiti/Flowable 深入BPM工作流》-什么是流程变量?
- Kruskal-Wallis test