wing是什么_acwing算法基础

wing是什么_acwing算法基础原题链接设有 N×N 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。如下图所示:某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从 A 点到 B 点共走了两次,试找出两条这样的路径,使得取得的数字和为最大。输入格式第一行为一个整数N,表示 N×N 的方格图。接下来的每行有三个整数,第一个为行号数,第二个为列号数,第三个为在该行、该列上所放的数。行和列编号从

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

原题链接
设有 N×N 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。如下图所示:

2.gif

某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B 点。

在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。

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

输入格式
第一行为一个整数N,表示 N×N 的方格图。

接下来的每行有三个整数,第一个为行号数,第二个为列号数,第三个为在该行、该列上所放的数。

行和列编号从 1 开始。

一行“0 0 0”表示结束。

输出格式
输出一个整数,表示两条路径上取得的最大的和。

数据范围
N≤10
输入样例:

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

题解
正着走一边和倒着走一边,等价于正着走两边。设f[i][j][k]:待变第一个走到(i,j)并且第二次走到(k,i+j-k)时最大值,状态转移方程为:有四个方向可以走到状态f[i][j][k]。

#include<bits/stdc++.h>
#include<cmath>
#define x first
#define y second
#define send string::npos
#define lowbit(x) (x&(-x))
#define left(x) x<<1
#define right(x) x<<1|1
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
typedef struct Node * pnode;
const int N = 1e1 + 10;
const int M = 5e5 + 10;
const int INF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3f3f;
const int Mod = 4e8;
int a[N][N];
int f[N][N][2 * N];
int main(){ 
   
    int n,x,y,w;
    cin>>n;
    while(cin>>x>>y>>w,!(x == 0 && y == 0 && w == 0)){ 
   
        a[x][y] = w;
    }
    for(int k = 2;k <= n;k ++)
        for(int i = 1;i <= n;i ++)
            for(int j = 1;j <= n;j ++){ 
   
                if(i + j - k <= n|| i + j - k >= 1){ 
   
// if(k - i <= 0)continue;
                    int v = a[i][j];
                    if(i != k)v += a[k][i + j - k];
                    f[i][j][k] = f[i - 1][j][k - 1];
                    f[i][j][k] = max(f[i][j][k],f[i][j - 1][k]);
                    f[i][j][k] = max(f[i][j][k],f[i - 1][j][k]);
                    f[i][j][k] = max(f[i][j][k],f[i][j - 1][k - 1]);
                    f[i][j][k] += v;
                }
            }

    cout<<f[n][n][n];
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168901.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月8日 下午9:46
下一篇 2022年8月8日 下午9:46


相关推荐

  • 同步队列串行接口QSPI的应用

    同步队列串行接口QSPI的应用原文链接 http www elecfans com emb danpianji 201108032084 html 导读 本文分析了一种改进的 SPI 传输接口 QSPI 的工作机制 并通过 QSPI 模块与触摸屏控制芯片 ADS7843 通信的实例阐述了该模块的典型应用 1QSPI 工作原理 QSPI 模块的结构如图 1 所示 与 SPI 相比 QSPI 结构最大的特点是以 80 字节的 RAM

    2026年3月18日
    2
  • 动态规划算法(DP)

    动态规划算法(DP)nbsp nbsp 校招笔试面试前 大家一般都会先去牛客网上刷刷题 剑指 offer leetcode 走起来 然后初次入手 发现很多不会 不会到什么程度呢 连个想法都没有 于是就去讨论区看答案 然后 java 大神 c 大神会给出花式解答 他们喜欢在答案前加一句 简单的 dp 算法 递归就可以解决 巴拉巴拉 说的还是很详细的 然而代码并不能看懂 毕竟 nbsp nbsp 人生苦短 我用 python 下面就先给大家举一些详细的

    2026年3月17日
    2
  • oracle+mybatis分页查询

    oracle+mybatis分页查询当使用oracle进行分页查询时使用以下方式:SELECT* FROM(SELECTA.*,ROWNUMRN     FROM(selectt.name   asname,           t.formula asformula,           t.data_fromasdataFro

    2022年5月6日
    46
  • vue双向数据绑定原理面试_vue双向绑定原理

    vue双向数据绑定原理面试_vue双向绑定原理vue.js则是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。vue实现双向数据绑定的原理就是利用了Object.defineProperty()这个方法重新定义了对象获取属性值(get)和设置属性值(set…

    2022年10月18日
    8
  • 工作记录 信息收集之子域名旁站探测

    工作记录 信息收集之子域名旁站探测目前我认为信息收集有大致以下三部分组成一 收集子域名 这个域名下的资产 收集 旁站 基于同一个服务器或者内网架设的网站 收集 1 在线网站谷歌 FOFA 可以收集后台页面 语法比较多 可以自行百度 语法 site xxx com 在线爆破网站在线子域名查询证书搜索基于 SSL 证书查找 https crt sh 基于 DNS 查找 https dns bufferover run dns q 2 脚本 工具搜索 推荐 GitHub aboul3la Sublist3r

    2026年3月16日
    2
  • AI智能体 | 扣子Coze工作流代码节点详解

    AI智能体 | 扣子Coze工作流代码节点详解

    2026年3月12日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号