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

C++---线性dp---方格取数(每日一道算法2023.2.25)

注意事项:
本题属于"数字三角形"和"摘花生"两题的进阶版,建议优先看懂那两道,有助理解。

题目:
请添加图片描述

输入:
8
2 3 13
2 6 6
3 5 7
4 4 14
5 2 21
5 6 4
6 3 15
7 2 14
0 0 0
输出:
67
#include <cmath>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;int const N = 11;
int w[N][N], f[N+N][N][N];  //注意k要开两倍,因为是i+j的总和
int n;int main()
{cin >> n;//接收数据直到“0 0 0”为止int a, b, c;while (cin >> a >> b >> c, a || b || c) w[a][b] = c;//线性dpfor (int k = 2; k<=n+n; k++) {for (int i1 = 1; i1<=n; i1++) {for (int i2 = 1; i2<=n; i2++) {// k = i1+j1 = i2+j2, 切记是相等关系int j1 = k-i1, j2 = k-i2;if (j1 >= 1 && j2 >= 1 && j1 <= n && j2 <= n) {   //判断j1和j2的合法性//如果是重叠点就只加一次,例如(1,2)(1,2), 如果是非重叠点就将两个点都加上,例如(1, 2)(2, 1)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]);     //down,downx = max(x, f[k-1][i1-1][i2![请添加图片描述](https://img-blog.csdnimg.cn/bd275c5a76dc45349b5cbc3ea8b6aa6d.png)
);       //down,rightx = max(x, f[k-1][i1][i2-1]);       //right,downx = max(x, f[k-1][i1][i2]);         //right, rightx += t;}}}}cout << f[n+n][n][n];return 0;
}

思路:
这道题的难点在于如何将每次一个点的线性dp转变为同时计算两个点
1:将单一点的线性dp跑两次,计算的时候将走过的点进行标注,权重变为0即可。
2:找到点与点的关系,同时计算两个点的dp。

这里我们讲第二种
还是熟悉的y式dp法。

1.状态表示:
f[k][i1][i2]: 从(1, 1)走到(i1, j1) 和 从(1, 1)走到(i2, j2)的最优方案的总和,并且两条线的重复点只能计算一次,属性为Max。

这里的k是表示当 (i1, j1)(i2, j2) 的横纵坐标和 相同时的值。
也就是k = i1+j1 = i2+j2, 因为这样的话,通过k,i1,i2可以推导出j1,j2的值,通过一个量来保存两个量。

这样就很巧妙的解决了标记已使用点的问题,如果两条线走到了相同点,
也就是当i1 = i2, j1 = j2(j1 = k-i1, j2 = k-i2),说明它们在相同点上那么这个点就只计算一次即可,因为数只能取一次。
而当i1 != i2说明状态转移后不在同一个点,那么分别计算w(i1,j1),w(i2,j2)两次。

2.状态计算:
两个点的前一个点向分别向右或下转移,所以有四种情况来讨论:

 f[k-1][i1-1][i2-1] + t   	down,downf[k-1][i1-1][i2] + t     	down,rightf[k-1][i1][i2-1] + t    	right,downf[k-1][i1][i2] + t       	right,right

也就是:f[k][i1][i2] = max(dd, dr, rd, rr)

声明:
算法思路来源为y总,详细请见https://www.acwing.com/
本文仅用作学习记录和交流

ps:最近要开学啦,恢复更新(假期的我真是懒狗…

相关文章:

C++---线性dp---方格取数(每日一道算法2023.2.25)

注意事项&#xff1a; 本题属于"数字三角形"和"摘花生"两题的进阶版&#xff0c;建议优先看懂那两道&#xff0c;有助理解。 题目&#xff1a; 输入: 8 2 3 13 2 6 6 3 5 7 4 4 14 5 2 21 5 6 4 6 3 15 7 2 14 0 0 0输出&#xff1a; 67#include <cm…...

《第一行代码》 第八章:应用手机多媒体

一&#xff0c;使用通知 第一步&#xff0c;创建项目&#xff0c;书写布局 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"vertical"android:layout_width"match_parent"android:layout_he…...

C++设计模式(20)——迭代器模式

亦称&#xff1a; Iterator 意图 迭代器模式是一种行为设计模式&#xff0c; 让你能在不暴露集合底层表现形式 &#xff08;列表、 栈和树等&#xff09; 的情况下遍历集合中所有的元素。 问题 集合是编程中最常使用的数据类型之一。 尽管如此&#xff0c; 集合只是一组对…...

戴尔Latitude 3410电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。硬件型号驱动情况主板戴尔Latitude 3410处理器英特尔酷睿i7-10510U已驱动内存8GB已驱动硬盘SK hynix BC511 NVMe SSD已驱动显卡Intel UHD 620Nvidia GeForce MX230(屏蔽)无法驱动声卡Realtek ALC236已驱动网卡Realtek RTL81…...

一起Talk Android吧(第五百零四回:如何调整组件在约束布局中的位置)

文章目录 背景介绍调整方法一调整方法二经验分享各位看官们大家好,上一回中咱们说的例子是"解决retrofit被混淆后代码出错的问题",这一回中咱们说的例子是" 如何调整组件在约束布局中的位置"。闲话休提,言归正转, 让我们一起Talk Android吧! 背景介绍…...

ssh连不上实验室的物理机了

实验室的电脑&#xff0c;不能在校外用 ssh 连接了 192.168.1.33 是本地地址&#xff0c;掩码16位&#xff0c;图1。 192.168.1.14 是实验室的另一台可以ssh连接的物理机&#xff0c;掩码16。 192.168.0.1 是无线路由器地址。 192.168.0.2 是192.168.1.14上的虚拟机地址&#…...

selinux讲解

Selinux讲解 1、selinux的概述 Selinux的历史 Linux安全性与windows在不开启防御措施的时候是一样的&#xff1b;同样是C2级别的安全防护安全级别评定&#xff1a; D–>C1–>C2–>B1–>B2–>B3–>A1 D级&#xff0c;最低安全性C1级&#xff0c;主存取控制…...

【计算机网络】TCP底层设计交互原理

文章目录1.TCP底层三次握手详细流程2.TCP洪水攻击介绍和ss命令浅析3.Linux服务器TCP洪水攻击入侵案例4.TCP洪水攻击结果分析和解决方案5.TCP底层四次挥手详细流程1.TCP底层三次握手详细流程 TCP的可靠性传输机制&#xff1a;TCP三次我手的流程 一次握手&#xff1a;客户端发送一…...

Kotlin1.8新特性

Kotlin1.8.0新特性 新特性概述 JVM 的新实验性功能&#xff1a;递归复制或删除目录内容提升了 kotlin-reflect 性能新的 -Xdebug 编译器选项&#xff0c;提供更出色的调试体验kotlin-stdlib-jdk7 与 kotlin-stdlib-jdk8 合并为 kotlin-stdlib提升了 Objective-C/Swift 互操作…...

【Java8】

1、接口中默认方法修饰为普通方法 在jdk8之前&#xff0c;interface之中可以定义变量和方法&#xff0c;变量必须是public、static、final的&#xff0c;方法必须是public、abstract的&#xff0c;由于这些修饰符都是默认的。 接口定义方法: public抽象方法需要子类实现 接口定…...

阿里 Java 程序员面试经验分享,附带个人学习笔记、路线大纲

背景经历 当时我工作近5年&#xff0c;明显感觉到了瓶颈期。说句不好听的成了老油条&#xff0c;可以每天舒服的混日子&#xff08;这也有好处&#xff0c;有时间准备面试&#xff09;。这对于个人成长不利&#xff0c;长此以往可能面临大龄失业。所以我觉得需要痛下决心改变一…...

十大算法基础——上(共有20道例题,大多数为简单题)

一、枚举&#xff08;Enumerate&#xff09;算法 定义&#xff1a;就是一个个举例出来&#xff0c;然后看看符不符合条件。 举例&#xff1a;一个数组中的数互不相同&#xff0c;求其中和为0的数对的个数。 for (int i 0; i < n; i)for (int j 0; j < i; j)if (a[i] …...

【PAT甲级题解记录】1018 Public Bike Management (30 分)

【PAT甲级题解记录】1018 Public Bike Management (30 分) 前言 Problem&#xff1a;1018 Public Bike Management (30 分) Tags&#xff1a;dijkstra最短路径 DFS Difficulty&#xff1a;剧情模式 想流点汗 想流点血 死而无憾 Address&#xff1a;1018 Public Bike Managemen…...

SpringCloud————Eureka概述及单机注册中心搭建

Spring Cloud Eureka是Netflix开发的注册发现组件&#xff0c;本身是一个基于REST的服务。提供注册与发现&#xff0c;同时还提供了负载均衡、故障转移等能力。 Eureka组件的三个角色 服务中心服务提供者服务消费者 Eureka Server&#xff1a;服务器端。提供服务的注册和发现…...

原生django raw() 分页

def change_obj_to_dict(self,temp):dict {}dict["wxh_name"] temp.wxh_namedict["types"] temp.typesdict["subject"] temp.subjectdict["ids"] temp.ids# 虽然产品表里没有替代型号&#xff0c;但是通过sql语句的raw()查询可以…...

Android 9.0 Settings 搜索功能屏蔽某个app

1.概述 在9.0的系统rom产品定制化开发过程中,在系统Settings的开发功能中,最近产品需求要求去掉搜索中屏蔽某个app的搜索,就是根据包名,不让搜索出某个app., 在系统setting中,搜索功能中,根据包名过滤掉某个app的搜索功能,所以需要熟悉系统Settings中的搜索的相关功能,…...

SQL性能优化的47个小技巧,果断收藏!

1、先了解MySQL的执行过程 了解了MySQL的执行过程&#xff0c;我们才知道如何进行sql优化。 客户端发送一条查询语句到服务器&#xff1b; 服务器先查询缓存&#xff0c;如果命中缓存&#xff0c;则立即返回存储在缓存中的数据&#xff1b; 未命中缓存后&#xff0c;MySQL通…...

SE | 哇哦!让人不断感叹真香的数据格式!~

1写在前面 最近在用的包经常涉及到SummarizedExperiment格式的文件&#xff0c;不知道大家有没有遇到过。&#x1f912; 一开始觉得这种格式真麻烦&#xff0c;后面搞懂了之后发现真是香啊&#xff0c;爱不释手&#xff01;~&#x1f61c; 2什么是SummarizedExperiment 这种cla…...

运行Qt后出现无法显示字库问题的解决方案

问题描述&#xff1a;运行后字体出现问题QFontDatabase: Cannot find font directory解决前提&#xff1a; 其实就是移植后字体库中是空的&#xff0c;字没办法进行显示本质就是我们只需要通过某种手段将QT界面中的字母所调用的库进行填充即可此处需要注意的是&#xff0c;必须…...

数据库浅谈之共识算法

数据库浅谈之共识算法 HELLO&#xff0c;各位博友好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 这里是数据库浅谈系列&#xff0c;收录在专栏 DATABASE 中 &#x1f61c;&#x1f61c;&#x1f61c; 本系列阿呆将记录一些数据库领域相关的知识 &#x1…...

Fish 4.6发布,命令行工具迎来新升级

近日&#xff0c;基于 Rust 语言开发的现代化交互式 Shell Fish 4.6 正式发布。它以智能提示和友好体验著称&#xff0c;此次更新带来细节优化&#xff0c;支持 systemd 环境变量&#xff0c;提升与 Linux 系统集成度。深度集成 systemd2024 年起&#xff0c;systemd 引入三个用…...

Mustache错误处理与调试:7个常见问题排查清单

Mustache错误处理与调试&#xff1a;7个常见问题排查清单 【免费下载链接】mustache Logic-less Ruby templates. 项目地址: https://gitcode.com/gh_mirrors/mu/mustache Mustache是一款流行的无逻辑Ruby模板引擎&#xff0c;但开发者在实际使用中经常会遇到各种错误和…...

Pencil原型工具全攻略:从环境搭建到高级配置

Pencil原型工具全攻略&#xff1a;从环境搭建到高级配置 【免费下载链接】pencil DEPRECATED: Multiplatform GUI Prototyping/Wireframing 项目地址: https://gitcode.com/gh_mirrors/pen/pencil Pencil原型工具&#xff1a;开源价值定位与核心特性解析 核心价值&…...

springboot+vue基于web的电脑配件商城的设计系统

目录 同行可拿货,招校园代理 ,本人源头供货商系统功能模块划分技术架构设计要点特色功能实现路径安全防护措施扩展性考虑 项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 同行可拿货,招校园代理 ,本人源头供货商 系统功能模块…...

2024通信工程师初级备考指南:综合能力与专业实务核心考点解析

1. 2024通信工程师初级考试概况 2024年通信工程师初级资格考试定于9月28日举行&#xff0c;采用机考形式&#xff0c;考试时间为上午8:30至12:30&#xff0c;总时长4小时。这个考试分为两个科目&#xff1a;《通信专业综合能力》和《通信专业实务》&#xff0c;两科连续考试&am…...

告别文献堆砌!PaperXie AI 文献综述:重构学术写作逻辑,3 步打造导师青睐的深度综述

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/ai/journalsReviewedhttps://www.paperxie.cn/ai/journalsReviewed 在学术写作的漫漫长路上&#xff0c;文献综述宛如横亘在无数本科生、研究生面前的 "天堑"—— …...

从PolarCTF一道Crypto题,聊聊如何用SageMath秒解自定义群运算的离散对数问题

从PolarCTF一道Crypto题看SageMath在离散对数问题中的实战应用 1. 密码学竞赛中的非标准群运算挑战 在CTF密码学题目中&#xff0c;自定义群运算的离散对数问题&#xff08;DLP&#xff09;是常见的高频考点。近期PolarCTF竞赛中出现了一道典型题目&#xff0c;要求参赛者在非…...

别再只用计数器了!手把手教你用Java实现滑动窗口限流(附完整可运行代码)

从零构建高精度滑动窗口限流器&#xff1a;Java实战与生产级优化 深夜的报警短信又一次震醒了你——核心API在整点时刻被突发流量冲垮。翻开监控图表&#xff0c;发现简单的计数器限流就像漏水的篮子&#xff0c;每到时间窗口切换的临界点&#xff0c;系统就会遭遇请求洪峰。这…...

OpenClaw开源项目深度体验:对比其与星图GPU平台Qwen3-14B-Int4-AWQ部署差异

OpenClaw开源项目深度体验&#xff1a;对比其与星图GPU平台Qwen3-14B-Int4-AWQ部署差异 1. 项目概览与核心功能 OpenClaw是近期备受关注的开源大模型项目&#xff0c;主打轻量化和易部署特性。它采用混合专家架构(MoE)&#xff0c;在保持模型性能的同时显著降低了计算资源需求…...

无噪音RS1 ROSAHL 电解式除湿器 3D 打印耗材盒/户外摄像头/激光器精准除湿设备

RS1 是 ROSAHL&#xff08;日本 Ryosai Technica 生产&#xff09;推出的一款超紧凑型电解式除湿器&#xff0c;采用全球领先的固体聚合物电解质&#xff08;SPE&#xff09;膜技术&#xff0c;通过电化学原理主动将密闭空间内的水分子分解并以气态形式排出。它具备无噪音、无振…...