Problem-F
2016-05-07 16:09
246 查看
概述:现在有一个数塔,要从顶层走到底层,问走过的数的和最大是多少。
思路:作为动态规划的题目,这个题在推理时明显是从最底层开始,走向最顶层,这样从最底层的某一个开始,想倒数第二层走,将每个最底层的数字加到倒数第二层,求最大的数字,然后再向上走,直到到顶层,就是所求的最大数。
#include<iostream>
#include<stdio.h>
#include<fstream>
using namespace std;
int max(int a, int b)
{
if (a > b)
return a;
else return b;
}
int main()
{
//ifstream cin("in.txt");
int T,n;
int sum[101][101];
cin >> T;
while (T--)
{
cin >> n;
for (int i = 0;i < n;i++)
{
for (int j = 0;j <= i;j++)
cin >> sum[i][j];
}
for (int i = n - 1;i >= 1;i--)
{
for (int j = 0;j < i;j++)
sum[i-1][j] = max(sum[i][j]+sum[i - 1][j],sum[i][j+1]+sum[i-1][j]);
}
cout << sum[0][0] << endl;
}
}
思路:作为动态规划的题目,这个题在推理时明显是从最底层开始,走向最顶层,这样从最底层的某一个开始,想倒数第二层走,将每个最底层的数字加到倒数第二层,求最大的数字,然后再向上走,直到到顶层,就是所求的最大数。
#include<iostream>
#include<stdio.h>
#include<fstream>
using namespace std;
int max(int a, int b)
{
if (a > b)
return a;
else return b;
}
int main()
{
//ifstream cin("in.txt");
int T,n;
int sum[101][101];
cin >> T;
while (T--)
{
cin >> n;
for (int i = 0;i < n;i++)
{
for (int j = 0;j <= i;j++)
cin >> sum[i][j];
}
for (int i = n - 1;i >= 1;i--)
{
for (int j = 0;j < i;j++)
sum[i-1][j] = max(sum[i][j]+sum[i - 1][j],sum[i][j+1]+sum[i-1][j]);
}
cout << sum[0][0] << endl;
}
}
相关文章推荐
- git
- C# winform中使窗体最小化(NotifyIcon)
- 有向无环图(DAG)的最小路径覆盖
- 在ASP.NET 2.0中操作数据之二十四:分页和排序报表数据
- high memory 映射 ----2
- 《Apache Cocoon2.2 学习》前言
- Science发表的超赞聚类算法
- 事件绑定1
- Resharp最新破解方法
- Python2 连接MySQL
- EventLog实现事件日志操作
- 数据处理1:一个中型数据的数据处理平台构建
- GridView的用法
- android studio 解决External file changes sync
- JAVA中将一个时间段按固定间隔拆分为List
- keychain service钥匙串服务
- Mac Linux Maven环境变量设置
- GreenDao 使用教程 一
- HTML的title属性
- volatile关键字与竞态条件和sigchild信号