终于开始写人生第一道DP了。
第一题,耳熟能详的猴子吃香蕉问题。
题目的话,就不放出来了,去lightoj上就能找到。
在一个菱形中找到一条路径,使得猴子能吃到的香蕉数最多。
看下图,题目比较容易想到,用一个相同的表记录走到某一个为止能吃到的香蕉数,每次决策取最大的就是了。
实际编程时,我们是以二维数组来填表的,所以请把下图想象成一个实心右箭头’>’样子的三角形

7  0  0  0
6  4  0  0
2  5  10 0
9  8  12 2
2  12 7  0
8  2  0  0
10 0  0  0

我们定义
input[i][j]:第i行第j列的格子所拥有的香蕉数,
dp[i][j]:走到第i行第j列的格子可以吃到的最大香蕉总数。
菱形的行数:2*N-1
最终dp[2*N-2][0],保存的值就是答案
则从头往下递推可以得到下面的状态转移方程

dp[i][j]=⎧⎩⎨⎪⎪⎪⎪⎪⎪input[i][j]①input[i][j]+dp[i−1][j]②input[i][j]+max(dp[i−1][j−1],dp[i−1][j])③input[i][j]+max(dp[i−1][j],dp[i−1][j+1])④

dp[i][j]= \begin{cases} input[i][j]①\\ input[i][j]+dp[i-1][j]②\\ input[i][j] + max(dp[i-1][j-1],dp[i-1][j])③\\ input[i][j] + max(dp[i-1][j],dp[i-1][j+1])④\end{cases}
①: j=i=0j=i=0
②: j=0,0<i<Nj=0,0
③: 0<j<i,0<i<N0
④: i>=Ni>=N
上面的状态有点多,如果我们换一种方式

0 7  0  0  0
0 6  4  0  0
0 2  5  10 0
0 9  8  12 2
0 2  12 7  0
0 8  2  0  0
0 10 0  0  0

则②的转移可以合并成③

以下是第一种状态转移的代码,代码规范就请忽略吧。第二种状态转移的实现就不写了,网上也能找到别的大神的实现。虽然AC了,但待优化的地方还有很多。

#include <iostream>
#include <cstdio>
#include <math.h>
#include<memory.h>
using namespace std;
int main() {int N, caseno = 0, cases;scanf("%d", &cases);while( cases-- ) {cin>>N;long long input[2*N-1][N];//输入long long dp[2*N-1][N]; memset(input,0,sizeof(input));memset(dp,0,sizeof(dp));for(int i=0;i<2*N-1;i++){if(i<N){for(int j=0;j<=i;j++){cin>>input[i][j];}}else{for(int j=0;j<2*N-i-1;j++){cin>>input[i][j];}}}/*  for(int i=0;i<2*N-1;i++)//测试输出 {for(int j=0;j<N;j++){cout<<input[i][j]<<" ";}cout<<endl;}*///DP递推dp[0][0] = input[0][0];//初始条件dp[0][2] = 0;for(int i=1;i<2*N-1;i++){if(i<N){for(int j=0;j<=i;j++){if(j==0){dp[i][j]=input[i][j]+dp[i-1][j];}else {dp[i][j] = input[i][j] + max(dp[i-1][j-1],dp[i-1][j]);   }}}else{for(int j=0;j<2*N-i-1;j++){dp[i][j]=input[i][j] + max(dp[i-1][j],dp[i-1][j+1]);}}}/*  for(int i=0;i<2*N-1;i++)//测试输出 {for(int j=0;j<N;j++){cout<<dp[i][j]<<" ";}cout<<endl;}*/cout<<"Case "<<++caseno<<": "<<dp[2*N-2][0]<<endl;}return 0;
}

每日刷题:lightoj-1004 - Monkey Banana Problem相关推荐

  1. Light oj 1004 - Monkey Banana Problem(DP)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1004 1004 - Monkey Banana Problem     PDF (En ...

  2. 2022-04-14每日刷题打卡

    2022-04-14每日刷题打卡 代码源--每日一题 上帝的集合 - 题目 - Daimayuan Online Judge 题目描述 现在上帝有一个空集合,现在他命令你为他执行下列三种操作 n 次, ...

  3. 2022-03-10每日刷题打卡

    2022-03-10每日刷题打卡 力扣--每日一题 589. N 叉树的前序遍历 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 . n 叉树 在输入中按层序遍历进行序列化表示,每 ...

  4. 2022-04-27每日刷题打卡

    2022-04-27每日刷题打卡 代码源--每日一题 素数之欢 - 题目 - Daimayuan Online Judge 现给定两个 四位素数 a,b. 你可以执行多次下面的操作: 修改数字 a 的 ...

  5. 2022-03-14每日刷题打卡

    2022-03-14每日刷题打卡 代码源--每日一题 网格判断 - 题目 - Daimayuan Online Judge 您将获得一个 n×n 的网格,网格中每个正方形的颜色为黑色或白色.如果满足以 ...

  6. 2022-02-16每日刷题打卡

    2022-02-16每日刷题打卡 AcWing--算法基础 338. 计数问题 - AcWing题库 给定两个整数 a 和 b,求 a 和 b 之间的所有数字中 0∼9 的出现次数. 例如,a=102 ...

  7. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  8. 力扣牛客每日刷题(Python解法持续更新)

    力扣牛客每日刷题(持续更新) 初试结束第15天, 之前简单的处理了部分毕设方面的任务, 对接下来的学习做了个简单的规划 决定每天开始刷几道力扣题提高一下算法的理解,不能让之前学的数据结构都忘记了 每道 ...

  9. 2022-04-01每日刷题打卡

    2022-04-01每日刷题打卡 代码源--每日一题 Lusir的游戏 - 题目 - Daimayuan Online Judge Lusir 正在玩一个古老的基于 DOS 的游戏. 游戏中有 N+1 ...

最新文章

  1. 软件工程几点总结要点
  2. hdu 5139(离线处理)
  3. Hadoop Kerberos 认证下 Sentry 安装 + Sentry 权限设置使用
  4. 下载cx oracle 6,在Centos 6上安装cx_Oracle
  5. win10如何安装域名系统服务器地址,win10搭建dns解析服务器地址
  6. ie和谷歌在java中空格兼容,谷歌和IE浏览器的兼容性问题,相同的html结构竟然在两个浏览器不一样...
  7. 美发布《2025年的数学科学》报告
  8. Note for Consulting Handbook3
  9. 创意水彩中国风重阳节PPT模板
  10. 【Windows】六种正确清理C盘的方法,解决你的红色烦恼
  11. 高仿QQ空间广告位 ——— 一个位置来回切换两张广告图
  12. win7 旗舰版系统激活方法
  13. B站评论区抽奖[python]
  14. 高德地图宣布品牌升级,打造出门好生活开放服务平台
  15. BodyContent揭秘及定制复杂的JSP标签
  16. 改进YOLOv5 | Stand-Alone Self-Attention | 针对视觉任务的独立自注意力层 | 搭建纯注意力FPN+PAN结构
  17. TCP 的那些事 | SACK
  18. 从安卓巴士到CocoaChina,曾经的顶级流量王者,如今的落寞与淡去
  19. MooTools and Sizzle
  20. 云服务器怎么采购便宜?云服务器优惠 3 大准则

热门文章

  1. tensorflow中sparse_placeholder在saved_model中保存pb模型的使用方法
  2. 手机注册服务器异常是什么问题,ohho注册不了网络异常
  3. MySQL update语句使用连表(join)
  4. electron 热更新
  5. 输入年份和月份,求该月有多少天
  6. 个人物联网(目前用到了树莓派、PMS7003攀藤g7传感器、DHT11温湿度传感器)
  7. 【TeXstudio】【3】较为完整的论文排版模板与bib文件引用方法
  8. 23上教资开始注册!详细报名流程看这一篇就够了!(建议收藏)
  9. 关于前端上传文件到后台,文件大小超出限制,导致上传失败的解决办法。
  10. Lotus Sametime