计蒜客CS109DP习题:捡水果

2024-04-01 20:08

本文主要是介绍计蒜客CS109DP习题:捡水果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

蒜头在玩一款游戏,他在一个山顶,现在他要下山,山上有许多水果,蒜头每下一个高度就可以捡起一个水果,并且获得水果的能量。

山的形状如图所示:

 
1
   3
2
  1 2
3
 6 2 3
4
3 5 4 1

这是一个高度为 44 的山,数字代表水果的能量。每次下一个高度,蒜头需要选择是往左下走,还是往右下走。例如:对于上图的情况,蒜头能获得的最大能量为,3 + 1 + 6 + 5 = 153+1+6+5=15。现在,蒜头希望你能帮他计算出下山能获得的最大能量。

输入格式

第一行输入一个 nn,代表山的高度。(1 < n <= 10001<n<=1000)接下来 n 行,第 i+1i+1 行有 ii 个数字,代表水果的能量,水果能量为正整数且不大于 10001000

输出格式

输出一个数字,代表下山一共获得的最大能量,占一行。

样例输入
4
3
1 2
6 2 3
3 5 4 1
样例输出
15

首先用DFS的思想过一遍,从上往下遍历,每层dfs向下递归有两种情况。需要传递和维护的是行列,以及上一层的最大能量结果。即

dfs(s_ij,i,j){

    dfs(s_ij+nl[i+1][j],i+1,j);

    dfs(s_ij+nl[i+1][j+1],i+1,j+1);

}

现在换用递推的方式实现,从最上层往下循环即可,很简单。核心代码如下。

for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+nengliang[i][j];
}
}


附上源程序代码:


#include<bits/stdc++.h>using namespace std;int  nengliang[1007][1007];
long long dp[1007][1007];int main(void){int n;cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){cin>>nengliang[i][j];}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+nengliang[i][j];}}long long sum=0;for(int i=1;i<=n;i++){sum=max(dp[n][i],sum);}cout<<sum<<endl;return 0;
}



这篇关于计蒜客CS109DP习题:捡水果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/868040

相关文章

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

计蒜客 Skiing 最长路

In this winter holiday, Bob has a plan for skiing at the mountain resort. This ski resort has MM different ski paths and NN different flags situated at those turning points. The ii-th path from the

计蒜客 Half-consecutive Numbers 暴力打表找规律

The numbers 11, 33, 66, 1010, 1515, 2121, 2828, 3636, 4545 and t_i=\frac{1}{2}i(i+1)t​i​​=​2​​1​​i(i+1), are called half-consecutive. For given NN, find the smallest rr which is no smaller than NN

904.水果成篮

题目 链接:leetcode链接 思路分析(滑动窗口) 读完题目,很明显,这个题目需要我们寻找一个最长子数组,使得这个子数组里面最多存在两种不同的数字,很容易联想到使用滑动窗口。 另外,需要使用hash表来记录区间内的不同种水果的个数 首先还是left,right = 0; 进窗口:right进哈希表 判断:哈希表的size > 2,就需要出窗口 出窗口:hash[left]–的同时,

第六章习题11.输出以下图形

🌏个人博客:尹蓝锐的博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~ 1、题目要求: 输出以下图形

【C++ Primer Plus习题】12.2

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "String.h"using namespace std;int main(){String s1(" and I am a

c++习题30-求10000以内N的阶乘

目录 一,题目  二,思路 三,代码    一,题目  描述 求10000以内n的阶乘。 输入描述 只有一行输入,整数n(0≤n≤10000)。 输出描述 一行,即n!的值。 用例输入 1  4 用例输出 1  24   二,思路 n    n!           0    1 1    1*1=1 2    1*2=2 3    2*3=6 4

C语言程序与设计第四版课后习题 - 1~8章大合集

前言 本文章是一个大合集,按照课后习题的命名方式命名,方便寻找,只需要在目录上点相对应的题号即可在这里插入图片描述 第一章课后习题 1.1 编写一个C程序 题目概述: 请参照本章例题,编写一个C程序,输出一下信息: *****************************Very good!***************************** 代码实现: #define

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ

【C++ Primer Plus习题】12.1

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "Cow.h"using namespace std;int main(){Cow c1;Cow c2("老母牛", "喝奶"