1625 codevs数字金字塔
1625 数字金字塔
USACO
考虑在下面被显示的数字金字塔.
写一个程序来计算从最高点开始在底部任意处结束的路径经过数字的和的最大.
每一步可以走到下方的点也可以到达右下方的点.
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
在上面的样例中,从 7 到 3 到 8 到 7 到 5 的路径产生了最大和:30
第一个行包含 R(1<= R<=1000) ,表示行的数目.
后面每行为这个数字金字塔特定行包含的整数.
所有的被供应的整数是非负的且不大于 100
单独的一行包含那个可能得到的最大的和.
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
30
分类标签 Tags 点此展开
//(1)深搜
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
const int mmax=;
int a[mmax][mmax];
int n;
void dfs(int,int,int);
int ans;
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
for(int j=;j<=i;j++)
scanf("%d",&a[i][j]);
dfs(,,a[][]);//走到(1,1)目前的和为a[1][1]
cout<<ans;
return ;
}
void dfs(int x,int y,int c)
{
if(x==n)//深搜到最后
{
if(c>ans)//如果目前的和比之前找的大
ans=c;//更新
return;
}
dfs(x+,y,c+a[x+][y]);//深搜左边
dfs(x+,y+,c+a[x+][y+]);//深搜右边
}
//(2)记忆化搜索(上一种方法超时的原因是因为对于同一个点重复递归了)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n;
const int mmax=;
int a[mmax][mmax],f[mmax][mmax];//f[x][y]为(x,y)到金字塔底部的最大值
int dfs(int,int);
int main()
{
scanf("%d",&n);
memset(f,-,sizeof(f));
for(int i=;i<=n;i++)
for(int j=;j<=i;j++)
scanf("%d",&a[i][j]);//输入
dfs(,);//从(1,1)深搜
cout<<f[][]<<endl;//输出(1,1)到底部的最大值
return ;
}
int dfs(int x,int y)
{
if(f[x][y]==-)//如果当前点没有递归过
{
if(x==n)f[x][y]=a[x][y];//如果已经到达底部,那么(x,y)到底部的和就是其本身
else
f[x][y]=a[x][y]+max(dfs(x+,y),dfs(x+,y+));//否则(x,y)到底部的和就等于本身加上左下和右下中较大的一个
}
return f[x][y];//返回
}
//(3)额。。。就是算出从头到每个点的最大和,最后扫一遍最后一行找最大值就好
#include<iostream>
#include<cstdio>
using namespace std;
int n;
const int maxx=;
int a[maxx][maxx],f[maxx][maxx];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
for(int j=;j<=i;j++)
scanf("%d",&a[i][j]);
f[][]=a[][];//从头到(1,1)的和就是(1,1)本身
for(int i=;i<=n;i++)
{
for(int j=;j<=i;j++)
{
f[i][j]=max(f[i-][j],f[i-][j-])+a[i][j];//等于其上左右较大的一个加上其本身;‘
}
}
int ans=;
for(int i=;i<=n;i++)
ans=max(ans,f[n][i]);//扫最后一行找最大值
cout<<ans;
return ;
}
1625 codevs数字金字塔的更多相关文章
- 【USACO 1.5.1】数字金字塔
[题目描述] 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左下方的点也可以到达右下方的点. 7 3 8 8 1 0 2 7 4 4 4 ...
- 【java】for循环输出数字金字塔
输出下列数字金字塔. 1 121 123211234321 public class deng { public static void main(String args[]) { int n ...
- P1216 数字金字塔
P1216 数字金字塔 我们可以用 f [ i ] [ j ] 表示从(1,1)出发,到达(i,j)的最大权值和. (i , j)可以由(i - 1 , j)或者(i - 1 , j - 1)转化来 ...
- codevs 1795 金字塔 2
codevs 1795 金字塔 2这个题比完全背包多了一个总数的限制,即一定要选(m+n)个,题中说总重量不超过n,所以至少选择m个重量为0的,然后初始化的时候,都填成重量为0的,然后再一个个地把它们 ...
- 洛谷 1.5.1 Number Triangles 数字金字塔
Description 考虑在下面被显示的数字金字塔. 写一个程序来计算从最高点开始在底部任意处结束的路径经过数字的和的最大. 每一步可以走到左下方的点也可以到达右下方的点. 7 3 8 8 1 0 ...
- html标签内部简单加js 一维数组求最大值 最小值两个值位置和数字金字塔图形
html标签内部,简单加js <a href=""></a><!DOCTYPE html PUBLIC "-//W3C//DTD XHTM ...
- 数字金字塔 动态规划(优化版) USACO 一维dp压缩版
1016: 1.5.1 Number Triangles 数字金字塔 时间限制: 1 Sec 内存限制: 128 MB提交: 9 解决: 8[提交] [状态] [讨论版] [命题人:外部导入] 题 ...
- Python输出数字金字塔
使用Python输出一个数字金字塔 运行结果: 源代码: ''' Python输出数字金字塔 ''' for x in range(1,10): print(' '*(15-x),end='') n= ...
- Codevs 数字三角形 问题合集
1220 数字三角形 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 如图所示的数字三角形,从顶部出发,在每一结点可以选择向左走或得 ...
随机推荐
- Linux Shell编程 条件判断语法
if条件判断语句 单分支 if 条件语句 语法格式: if [条件判断式];then 程序 fi 或者 if [条件判断式] then 程序 fi 在使用单分支 if 条件查询时需要注意几点: if ...
- libhdfs的配置和使用
测试环境:centos6.10,hadoop2.7.3,jdk1.8 测试代码:HDFSCSample.c #include "hdfs.h" #include <strin ...
- ubuntu下make无法安装的问题
发布时间:2015-10-30 10:51:30来源:linux网站作者:_莫欺少年穷 在帮同学服务器安装环境过程中,发现,make 命令不能使用,提示: The program 'make' is ...
- JavaWeb Request和Response
1. Request与Response 1.1. Web应用运行机制 到目前为止,我们已经掌握了Web应用程序的运行机制,现在学习的就是Web应用程序运行机制中很重要的内容 —— Request与Re ...
- Qt开发动画
#include <QPropertyAnimation> #include <QDesktopWidget> //下坠 void MainWindow::on_pushBut ...
- Centos 一次卸载多个RPM包
rpm 不支持通配符,可以使用 xargs来接收多个变量 示例,一次性卸载所有 erlang先关的rpm包: rpm -qa | grep erlang | xargs rpm -e --nodeps
- 定时任务 Linux cron job 初步使用
查看定时任务的命令为:crontab -l 编辑定时任务的命令为:crontab -e (编辑后立即生效 若注释可在行首加# 同vi) 定时任务说明 每一行为一 ...
- SpringMVC中响应json数据(异步传送)
1.首先导入3个jar包: jackson-annotations-2.1.5.jar jackson-core-2.1.5.jar jackson-databind-2.1.5.jar JSON所需 ...
- jsp:tld标签
z注意每个uri地址要保持统一 1.创建MytagPrinta.java文件 package cn.tag; import java.io.IOException; import javax.serv ...
- javascript 跨域问题解决办法总结
跨域的意思就是不同域名之间的页面默认是无法通信的.因为浏览器默认是禁止跨域的: 图所示:chrome浏览器尝试获取mainFrame失败,提示DomException 1).假如你有个网站 a.com ...