hznu 1636: 方格取数(dp,灵活题)

[AcWing] 方格取数速看复习 方格取数 题目 设有 N×N 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。如下图所示: 在这里插入图片描述 某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B 点。 在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。 此人从 A 点到 B 点共走了两次,试找出两条这样的路径,使得取得的数字和为最大。 输入格式 第一行为一个整数N,表示 N×N 的方格图。 接下来的每行有三个整数,第一个为行号数,第二个为列号数,第三个为在该行、该列上所 阅读详情

设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。如下图所示(见样例):

某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。

此人从A点到B 点共走两次,试找出2条这样的路径,使得取得的数之和为最大。

输入

 输入的第一行为一个整数N(表示N*N的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的0表示输入结束。

输出

只需输出一个整数,表示2条路径上取得的最大的和。

样例输入

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
http://hsacm.cn/JudgeOnline/problem.php?id=1636

要找两条最优路径,我们可以转换一下思路,使两个人每一步都同时走,然后我们同步记录。

两种思路:1、dp[k][i][j],k表示第几秒,A走到第i行(第k-i+1列),B走到第j行(第k-j+1列)

#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<cmath>
#include<queue>
#include<stdlib.h>
#include<map>
#include<vector>
#include<cstdio>
#define ll long long
using namespace std;
int n,a,b,c;
int x[11][11];
int dp[22][11][11];
int main(){  
    cin>>n;
    while(cin>>a>>b>>c&&(a!=0||b!=0||c!=0)){
        x[a][b]=c;
    } 
    for (int k=1;k<=n+n-1;k++){
        for (int i=1;i<=min(n,k);i++){
            for (int j=1;j<=min(n,k);j++){  
                int s;  
                if (i==j) 
                    s=x[i][k-i+1];  
                else
                    s=x[i][k-i+1]+x[j][k-j+1];  
                dp[k][i][j]=max(max(dp[k-1][i][j],dp[k-1][i-1][j-1]),max(dp[k-1][i-1][j],dp[k-1][i][j-1]));  
                dp[k][i][j]+=s;  
            }
        }
    }
    cout<<dp[n+n-1][n][n]<<endl;  
    return 0;  
}  
2、dp[i][j][k][l]表示A走到(i,j),B走到(k,l)时得到的最大值

#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<cmath>
#include<queue>
#include<stdlib.h>
#include<map>
#include<vector>
#include<cstdio>
#define ll long long
using namespace std;
int n,a,b,c;
int x[11][11];
int dp[11][11][11][11];
int main(){  
    cin>>n;
    while(cin>>a>>b>>c&&(a!=0||b!=0||c!=0)){
        x[a][b]=c;
    } 
    for(int i=1;i<=n;++i){
        for(int j=1;j<=n;++j){
            for(int k=1;k<=n;++k){
                for(int l=1;l<=n;++l){
                    dp[i][j][k][l]=max(max(dp[i-1][j][k-1][l],dp[i-1][j][k][l-1]),max(dp[i][j-1][k-1][l],dp[i][j-1][k][l-1]));
                    if(i==k&&j==l)
                        dp[i][j][k][l]+=x[i][j];
                    else
                        dp[i][j][k][l]+=x[i][j]+x[k][l];
                }
            }
        }
    }
    cout<<dp[n][n][n][n]<<endl;  
    return 0;  
}  

方格取数算法详解 今天做到了一个比较难的算法,看了好久都没有思路。。记录一下。 题目如下: 设有 N×N 的方格图 (N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0。如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 0 0 4 0 0 0 0 15 0 0 0 0 0 0 14 0 0 阅读详情

相关推荐

用PyTorch和snnTorch库5分钟搞定一个脉冲神经网络(SNN)手写数字识别Demo

本文详细介绍了如何使用PyTorch和snnTorch库快速搭建一个脉冲神经网络(SNN)手写数字识别Demo。通过模拟生物神经元的脉冲发放机制,SNN在低功耗场景中展现出独特优势。文章涵盖环境配置、数据预处理、模型构建、训练评估全流程,并提供了性能优化技巧和常见问题解决方案,帮助开发者在5分钟内实现高效的SNN应用。

weixin_29300931的博客 392

走地图(C语言)

任务描述 本关任务:在一个nxn的棋盘上,某人站在方格(0, 0),他只能向下或者向右,而且只能在棋盘的上三角中行走,问他走到(n-1, n-1)有多少种走法。编写一个程序计算。 编程要求 根据提示,在右侧编辑器编写代码,输入一个n, 要求输出从方格(0, 0),走到(n-1, n-1)有多少种走法。 测试说明 平台会对你编写的代码进行测试: 测试输入:6 预期输出:42 解析:经典的动态规划,使用动态数组及经典模板即可。 /********以下编写完整代码****************

皮_客的博客 2853

界面上下固定_基于ANSYS的胶粘结构界面开裂有限元计算

引言:目前工程上主要有螺栓,过盈,焊接和胶粘四种常用的连接方式,本文基于ANSYS Workbench环境,引入内聚力模型来实现对胶粘结构界面开裂失效的计算,文中的界面失效参数为随意给定,不是工程实际测试数据,仅起到演示作用!1.问题的描述如图所示给出了胶粘结构的三维模型,该胶粘结构由上下钢板组成,中间通过胶粘接到一起。(胶不需要建模,其影响主要通过内聚力模型实现)上下板的材料为结构钢,...

weixin_29473667的博客 1万+

一个n*n 的方格,要从左上角走到右下角,一次只能往右或往下走一步,求算法得出所有走动的方法数。...

题目一:一个n*n 的方格,要从左上角走到右下角,一次只能往右或往下走一步,求算法得出所有走动的方法数。 分析:对于第(i,j)个格子,只有向右走一步到达或者向左走一步到达,dp(i,j) = d(i-1,j)+dp(i,j)。边界为:dp(1,j) = 1 , 1<=j <n , dp(i,1) = 1 , 1<=i<=m. package april...

LZW760907的博客 5402

基于YOLOv5/v8/v10的垃圾分类识别系统:设计实现与性能优化(附代码+数据集)

做完这个毕设,你已经掌握了从数据准备、模型训练到界面开发的全流程。把模型部署到树莓派上,做个真正的“智能垃圾桶”硬件装置;加入语音提示功能,检测到垃圾后自动语音播报类别;试试融合多个YOLO模型的优势,让分类精度再上一个台阶。按照这个教程一步步做,你的毕设不仅能顺利完成,还能做出很多亮点。要是过程中遇到啥问题,别慌,慢慢琢磨或者咱们一起聊聊,肯定能把这个毕设做成让你满意的作品。

know_F0727的博客 463

ICV:Metal Fill Insertion流程

如果不想删除先前加的metal fill,可以使用signoff_create_metal_fill -mode add命令,当使用这个mode后,工具不会fix density问题,哪怕设置了signoff.create_metal_fill.fix_density_errors,设置这个mode后可以使用以下option控制metal fill 的插入。默认情况下,signoff_create_metal_fill是会删掉已经加进去的metal/via fill再重新加的。

m0_61544122的博客 1134

【动态规划】方格取数 (ssl 1010)

方格取数方格取数方格取数 Description 设有N*N的方格图(N&amp;amp;amp;amp;amp;lt;=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。如下图所示(见样例): 某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。 此人从A点到B 点共走两次,试找出2条这样的路径,使得取得的数之和为最大。 ...

ssllyf的博客 1000

模拟电路综合笔试题解析

本专栏预计更新60期,当前为第10期,文章约6000字,旨在帮助读者掌握模拟电路笔试的核心知识点与实战技巧。文章分为五个章节,涵盖基础理论、高频考点、大厂题目解析等内容。首先,文章详细解析了DC-DC与LDO的区别及选型依据,并通过真题分析帮助读者理解其应用场景。接着,文章深入探讨了运放电路设计、同步降压电路设计等高频考点,并结合实际案例提供解决方案。此外,文章还分享了特斯拉、华为、大疆等大厂的面试题及解析,帮助读者应对复杂电路设计挑战。最后,文章总结了模拟电路设计中的关键技巧与优化方法,为读者提供全面的笔

启芯硬件的博客 471

动态规划攻略

设有 N×N 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。如下图所示:某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从 A 点到 B 点共走了两次,试找出两条这样的路径,使得取得的数字和为最大。为什么不能分开走:第一次走到(n, n)求出最大值并记录路径令路径上点收益为0后再走一次。

weixin_45419526的博客 449

实现基于 Python 和 xterm.js 的 Web 交互终端demo

前端 (HTML):使用 xterm.js 作为前端终端模拟器库。创建了一个 WebSocket 连接到 ws://localhost:8765,这与后端服务器的地址和端口匹配。监听 WebSocket 消息,并将数据写入终端。同时监听用户输入并发送到服务器。后端 (Python):使用 websockets 库来创建 WebSocket 服务器,监听端口 8765。使用 paramiko 库来创建 SSH 客户端并连接到指定的远程服务器。

u010674101的专栏 876

基于Matlab的无迹卡尔曼滤波惯性导航与DVL组合导航

航天航空领域中的惯性导航是一种基于惯性测量单元(Inertial Measurement Unit,IMU)的导航方法,可以提供航向、速度和位置等信息。深度/速度测量器(Doppler Velocity Log,DVL)是一种常用的传感器,可用于测量水下航行器的速度。通过将DVL与无迹卡尔曼滤波相结合,可以实现高精度的组合导航。本文介绍了基于Matlab的无迹卡尔曼滤波(UKF)惯性导航与DVL组合导航的方法。以上是一种简化的示例代码,您可以根据实际应用需求进行相应的修改和优化。

DevSavantX的博客 418

信息学奥赛一本通题目解析:1277:【例9.21】方格取数(动态规划)

首先,我们定义一个四维数组,其中x1, y1表示第一条路径到达的位置,x2, y2表示第二条路径到达的位置。的值表示在第一条路径到达(x1, y1),第二条路径到达(x2, y2)时,可以取得的最大数字和。

lan_in的博客 1000

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

方块取数(luogu P1004)

设有 N×N 的方格图 (N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0。如下图所示(见样例): 某人从图的左上角的 A 点出发,可以向下行走,也可以向右走,直到到达右下角的 B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字 0)。此人从 A 点到 B 点共走两次,试找出 2 条这样的路径,使得取得的数之和为最大。 注意本题的重点是有2条路径。所以如果用二维的结构去解决,其算法的夫再度会很难想到。因为本题的最大数为9,所以直接用四维的数组分别储存两条路径。一个

KrMzyc的博客 357

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

蓝桥杯 格子取数 (双线程 动态规划)-------C语言—菜鸟级

/* 题目描述 设有N*N的方格图(N&amp;lt;=10),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。 某人从图的左上角的A 点(1,1)出发,可以向下行走,也可以向右走,直到到达右下角的B点(N,N)。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。 此人从A点到B 点共走两次,试找出2条这样的路径,使得取得的数之和为最大。 输入   输入的第一行为...

Five—菜鸟级的博客 984

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

落谷:P1004:方格取数

题目描述: 设有 N \times NN×N 的方格图 (N \le 9)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 00。如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 0 0 4 0 0 0 0 15 0 0 0 0 0 0 14 0 0 0 0 0

WeChat:A15047825994 399

洛谷P1004 [NOIP2000 提高组] 方格取数 四维动态规划

题目描述设有 N×N 的方格图 (N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0。如下图所示(见样例): 某人从图的左上角的 A点出发,可以向下行走,也可以向右走,直到到达右下角的 B点。在走过的路上,他可以取走方格中的数(**取走后的方格中将变为数字 0**)。 此人从 A 点到 B点共走两次,试找出 2 条这样的路径,使得取得的数之和为最大。 输入格式输入的第一行为一个整数 N(表示 N*N的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该

Sc_____的博客 626

练习Day——15(动态规划)

动态规划 目录动态规划方格取数数的划分装箱问题传球游戏传纸条入学考试开心的金明 方格取数 题目描述 设有N*N的方格图(N< =10),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。 某人从图的左上角的A 点(1,1)出发,可以向下行走,也可以向右走,直到到达右下角的B点(N,N)。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。 此人从A点到B 点共走两次,试找出2条这样的路径,使得取得的数之和为最大。 输入 输入的第一行为一个整数N(表示N*N的方格图),接下

薛铁钢的博客 546

使用二阶动态规划解决方格取数

采用2维动态规划方法解决方格取数

euler1983的专栏 772

算法提高课-1027. 方格取数 思考总结

设有 N×N 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。如下图所示:某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从 A 点到 B 点共走了两次,试找出两条这样的路径,使得取得的数字和为最大。

xiaolitongxue12_的博客 243

洛谷 P1004 方格取数 P1006 传纸条

P1004 方格取数 题目描述 设有 N \times NN×N 的方格图 (N \le 9)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 00。如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 ...

苦鬼·。 268

洛谷P1004方格取数(多维DP)

四维DP

nuc_ghp的博客 2781

动态规划解方格取数问题

动态规划解方格取数问题 题目描述 设有 N×N的方格图 (N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0。如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 0 0 4 0 0 0 0 15 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0

qq_41117896的博客 848

洛谷P1004方格取数(动态规划+DP+递推)

       递推关系必须是从次小的问题开始到较大的问题之间的转化,从这个角度来说,动态规划往往可以用递归程序来实现,不过因为递推可以充分利用前面保存的子问题的解来减少重复计算,所以对于大规模问题来说,有递归不可比拟的优势,这也是动态规划算法的核心之处。 题目        设有 N×N 的方格图 (N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0。如下图所示(见样例): A 0 0

galaxy的博客 1122

方格取数(动态规划)题解

题目描述: 设有N×N的方格图(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。 某人从图的左上角的AA点出发,可以向下行走,也可以向右走,直到到达右下角的BB点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。 此人从(0, 0)点到(n,n)点共走两次,试找出2条这样的路径,使得取得的数之和为最大。 输入格式: 输入的第一行为一个整数N(表示N×N的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的0表示输入结束。 如

黄佳俊的博客 1066

[洛谷]P1004 方格取数 (#动态规划 -2.1)

题目描述 设有N \times NN×N的方格图(N \le 9)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00。如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 0 0 ...

A.pro的博客 722
上一篇: hznu 1139: Minimax Triangulation(dp,三角形面积模板)
下一篇: 【codechef】Chef and Polygons(灵活题,坑题)
ccyy-
博客等级 码龄12年 31粉丝 244原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值