当前位置: 首页 > article >正文

动态规划DP 数字三角形模型 传纸条(题目分析+C++完整代码)

传纸条

原题链接

AcWing 275. 传纸条

题目描述

小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。

一次素质拓展活动中,班上同学安排坐成一个 m行 n 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。

幸运的是,他们可以通过传纸条来进行交流。

纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标 (1,1),小轩坐在矩阵的右下角,坐标 (m,n)。

从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递

在活动进行中,小渊希望给小轩传递一张纸条,同时希望小轩给他回复。

班里每个同学都可以帮他们传递,但只会帮他们一次,也就是说如果此人在小渊递给小轩纸条的时候帮忙,那么在小轩递给小渊的时候就不会再帮忙,反之亦然。

还有一件事情需要注意,全班每个同学愿意帮忙的好感度有高有低(注意:小渊和小轩的好心程度没有定义,输入时用 0表示),可以用一个 0∼100的自然数来表示,数越大表示越好心。

小渊和小轩希望尽可能找好心程度高的同学来帮忙传纸条,即找到来回两条传递路径,使得这两条路径上同学的好心程度之和最大

现在,请你帮助小渊和小轩找到这样的两条路径。

输入格式
第一行有 2个用空格隔开的整数 m和 n,表示学生矩阵有 m行 n列。
接下来的 m行是一个 m×n的矩阵,矩阵中第 i行 j列的整数表示坐在第 i行 j列学生的好心程度,每行的 n个整数之间用空格隔开。

输出格式
输出一个整数,表示来回两条路上参与传递纸条的学生的好心程度之和的最大值。

数据范围
1≤n,m≤50

输入样例:

3 3
0 3 9
2 8 5
5 7 0

输出样例:

34

题目分析

方格取数 类似,只需将从右下角传递小纸条至左上角也理解为从左上角传递至右下角即可。用 f [ k , i 1 , i 2 ] f[k,i1,i2] f[k,i1,i2] 表示状态。
“只会帮他们一次”即为“同一个格子只会被选择一次”。

完整代码

#include <iostream>
#include <algorithm>
using namespace std;
const int N=55;
int n,m;
int w[N][N];
int f[N*2][N][N];
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            scanf("%d",&w[i][j]);
        }
    }
    for(int k=2;k<=n+m;k++){
        for(int i1=max(1,k-m);i1<=min(k-1,n);i1++){
            for(int i2=max(1,k-m);i2<=min(k-1,n);i2++){
                int j1=k-i1,j2=k-i2;
                int t=w[i1][j1];
                if(i1!=i2) t+=w[i2][j2];
                int &x=f[k][i1][i2];
                x=max(x,f[k-1][i1-1][i2-1]+t);
                x=max(x,f[k-1][i1-1][i2]+t);
                x=max(x,f[k-1][i1][i2]+t);
                x=max(x,f[k-1][i1][i2-1]+t);
            }
            
        }
    }
    printf("%d",f[n+m][n][n]);
    return 0;
}

http://www.kler.cn/a/521882.html

相关文章:

  • scratch学习教程
  • WS2812 梳理和颜色表示方法的对比:RGB和HSV
  • 01-02 三元组与七元组
  • linux asio网络编程理论及实现
  • 基于物联网的智能环境监测系统(论文+源码)
  • Hugging Face 推出最小体积多模态模型,浏览器运行成为现实!
  • 提示词设计流程 ——《如何从0开始构建一个基于强化学习的AI智能体》使用场景为例
  • 机试题——最小矩阵宽度
  • 互联网概述
  • 【开源免费】基于Vue和SpringBoot的美食推荐商城(附论文)
  • 云计算的概念与特点:开启数字化时代的新篇章
  • 链表排序--(奇数位是升序,偶数位是降序)
  • 算法-遍历分发糖果
  • 解码大数据的四个V:体积、速度、种类与真实性
  • SpringMVC的参数处理
  • c语言中mysql_query的概念和使用案例
  • Niagara学习笔记
  • 解决Oracle SQL语句性能问题(10.5)——常用Hint及语法(7)(其他Hint)
  • 【linux】Linux 常见目录特性、权限和功能
  • LockSupport概述、阻塞方法park、唤醒方法unpark(thread)、解决的痛点、带来的面试题
  • Firewalld 防火墙
  • Python的那些事第三篇:Python编程的“调味料”与“交流术”运算符与输入输出
  • 读书笔记--分布式服务架构对比及优势
  • 基于SpringBoot的志愿者招募管理系统
  • 目标跟踪之sort算法(3)
  • [免费]基于Python的Django博客系统【论文+源码+SQL脚本】