H - 命运(动态规划) 数塔问题
H - 命运
可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机关。要知道,不论何人,若在迷宫中被困1小时以上,则必死无疑!
可怜的yifenfei为了去救MM,义无返顾地跳进了迷宫。让我们一起帮帮执着的他吧!
命运大迷宫可以看成是一个两维的方格阵列,如下图所示:
yifenfei一开始在左上角,目的当然是到达右下角的大魔王所在地。迷宫的每一个格子都受到幸运女神眷恋或者痛苦魔王的诅咒,所以每个格子都对应一个值,走到那里便自动得到了对应的值。
现在规定yifenfei只能向右或者向下走,向下一次只能走一格。但是如果向右走,则每次可以走一格或者走到该行的列数是当前所在列数倍数的格子,即:如果当前格子是(x,y),下一步可以是(x+1,y),(x,y+1)或者(x,y*k) 其中k>1。
为了能够最大把握的消灭魔王lemon,yifenfei希望能够在这个命运大迷宫中得到最大的幸运值。
- Input
-
输入数据首先是一个整数C,表示测试数据的组数。
每组测试数据的第一行是两个整数n,m,分别表示行数和列数(1<=n<=20,10<=m<=1000);
接着是n行数据,每行包含m个整数,表示n行m列的格子对应的幸运值K ( |k|<100 )。 - Output
- 请对应每组测试数据输出一个整数,表示yifenfei可以得到的最大幸运值。
- Sample Input
-
1 3 8 9 10 10 10 10 -10 10 10 10 -11 -1 0 2 11 10 -20 -11 -11 10 11 2 10 -10 -10
- Sample Output
-
52
嗯.....这题吧怎么说 刚开始木有一点思路于是去做了下馅饼问题 发现这是类似的都是数塔的问题不同也就在于一个是从上往下一个是从下往上
嗯然后还是很认真的错了好几发 嗯
小毛病不断比如 把j%k写成k%j等等一系列问题
最主要的是 在初始化的时候我弄成了0导致wa 嗯 没有考虑到是负数的问题的话 第一行的可能会是负数小于0那么 就会选择上面的那个
嗯这个是容易出错的地方还是要注意不过经过自己做了些数塔的问题 感觉好多了 果然好多东西必须得自己做才能发现一些列的问题
还是开心 ~~~~~~~~~
代码如下
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string.h>
#include<stdlib.h>
using namespace std;
int n,m;
int dp[25][1005];
int angle[25][1005];
int maxn(int a,int b)
{if(a>b)return a;return b;
}
int main()
{int t;int whatmaxn;scanf("%d",&t);while(t--){memset(angle,0,sizeof(angle));scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)scanf("%d",&angle[i][j]);}for(int i=0;i<1005;i++)dp[0][i]=-200;for(int i=0;i<25;i++)dp[i][0]=-200;dp[0][1]=0;int i,j;for(i=1;i<=n;i++){for(j=1;j<=m;j++){if(j==1)dp[i][j]=dp[i-1][j]+angle[i][j];else if(j==2)dp[i][j]=maxn(dp[i-1][j],dp[i][1])+angle[i][j];else {whatmaxn=-200;for(int k=1;k<j;k++){if(j%k==0)dp[i][j]=maxn(whatmaxn,dp[i][k]);}dp[i][j]=maxn(dp[i][j],dp[i][j-1]);dp[i][j]=maxn(dp[i][j],dp[i-1][j]);dp[i][j]=dp[i][j]+angle[i][j];}}}printf("%d\n",dp[n][m]); }return 0;
}
H - 命运(动态规划) 数塔问题相关推荐
- 动态规划--数塔问题
动态规划–数塔问题 今天学习了动态规划的数塔问题,老师给我们讲了三种方法. (1)第一种方法是原始的递归,就是从上往下看一个n层塔的最大路径问题可以转化为选出左右两个n-1层塔的最大路径问题的较大值, ...
- 55 - 算法 -动态规划 -数塔问题 感觉都是数组建模 递推方法规则
//模板#include <iostream> #include <cstdio> #include <string> using namespace std;/* ...
- c++ 动态规划(数塔)
c++ 动态规划(dp) 题目描述 观察下面的数塔.写一个程序查找从最高点到底部任意位置结束的路径,使路径经过数字的和最大. 每一步可以从当前点走到左下角的点,也可以到达右下角的点. 输入 5 13 ...
- 动态规划——数塔(hdu2084)
首先介绍一下动态规划: 动态规划(dynamic programming),我们称之为DP,是求最优解的一种很常见的方法. 思想和背包基本一样,如对背包感兴趣的可以移步 http://blog.csd ...
- python 动态规划 数塔_数塔问题,简单的动态规划算法
/* 数塔问题: 9 12 15 10 6 8 2 18 9 5 19 7 10 4 16 有形如图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走, 一直走到底层,要求找出一条路径,使路径 ...
- 动态规划——数塔问题
从原点(顶层)出发,只能向左或者向右,找到一条路径使得路径上的数字和最大: #include<stdio.h> //#include"algorithm.h" #def ...
- 算法.动态规划 导航/数塔取数字问题
目录 前言 从1+1开始 总结下概念 地图到图 回头看 代码 动态规划经典问题 前言 下面的概念和公式可能会吓到你,看不懂没关系,就是让你恶心的.反正我看着也挺恶心,专业就是让你看不懂,看懂了怎么能叫 ...
- C简单动态规划——爬数塔
问题描述: 小明在某个角落发现了一座由数字组成的斜塔,他I想到塔顶去看看.小明可以从底层任意一个数字出发逐层爬上去,每次可以爬至上一层数字上或者上一层左边相邻的数字上(第1列只能爬至正上方上一层的数字 ...
- 算法学习(动态规划)- 数塔问题
前言 之前碰到了扔鸡蛋问题(给你2个鸡蛋,在100层楼上扔,要求想出一个好的策略,去测出哪一层楼开始鸡蛋就会碎掉),一直摸不着头脑.后来才知道可以使用"动态规划"这种思想(或者叫算 ...
- 动态规划经典题目——数塔问题
一.题目 数塔问题 :要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 二.解题思路 动态规划解题思路可详见另一篇文章.数塔中元素用二维数组a[][]表示 ①定义状态 ...
最新文章
- 带你认识清华标杆课教师 | 卓晴:自带BGM的硬核“技术流”教师
- Go 语言调用 python2
- input placeholder样式
- 前端的date类型后台接收_腾讯高级前端工程师支招,云开发实现小程序打赏和提现云开发实践...
- SQL经典面试题及答案
- 2018年五大最佳前端框架比较,程序员会怎么选?
- 将datatable导出为excel的三种方式(转)
- redis笔记_源码_双端链表list
- android app 适应不同大小屏幕_移动APP测试:Android屏幕适配问题二
- [转载] 算法竞赛中的JAVA使用笔记
- 向内存中连续存入数据_实例35_在Excel中按条件筛选数据并存入新的表
- Centos 7上启动 vsftp报错处理
- Volatile(理解)
- 国外值得关注的网站系列之一
- 百度小程序如何搭建对搜索更友好?
- SEM竞价推广,如何选择关键词?
- FPGA 串口通信(补)——通用模块
- 戴尔游匣 G15 2022 高配版参数配置
- bitcoin区块结构分析
- Teager能量算子(TEO)_Python实现