luogu-P7074-方格取数2020

题目连接

  • 该题是CSP-J2-2020-T4

题目大意

在一个棋盘内,允许向右,或者向上、下移动,求经过的点的和最大。


题目分析

1、显然是DP题,但是和之前的方格取数(4维降3维)有一丁点区别;
2、如果对于每个点,都从三个方向过来,需要 O ( n 3 ) O(n^3) O(n3) ,能得 70 70 70 分;
3、如果分开数组做,用 d n [ i ] [ j ] dn[i][j] dn[i][j] 表示从上往下的最值, u p [ i ] [ j ] up[i][j] up[i][j] 表从下往上的最值, f [ i ] [ j ] f[i][j] f[i][j] 表示从左往右的最值,则可以在 O ( n 2 ) O(n^2) O(n2) 解答。


参考代码
//T4-方格取数 
//CSP-J2-2020
//三个方向的DP 
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll inf=1e18+9;
const int maxn=1e3+9;
int n,m;
ll a[maxn][maxn],up[maxn][maxn],dn[maxn][maxn],f[maxn][maxn];

int main(){
   
	cin>>n>>m;
	for(int i=1;i<=n;i++){
   
		for(int j=1;j<=m;j++){
   
			scanf("%lld",&a[i][j]);
		}
	}
	//初始化 
	for(int i=1;i<=n;i++){
   
		for(int j=1;j<=m;j++){
   
			f[i][j]=up[i]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值