poj 1163 The Triangle (记忆化搜索)
2015-12-22 14:37
459 查看
http://poj.org/problem?id=1163
The Triangle
Description
Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right.
Input
Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100. The numbers in the triangle,
all integers, are between 0 and 99.
Output
Your program is to write to standard output. The highest sum is written as an integer.
Sample Input
Sample Output
记忆化搜索
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <limits>
#include <queue>
#include <stack>
#include <vector>
#include <map>
using namespace std;
typedef long long LL;
#define N 750
#define INF 0x3f3f3f3f
#define PI acos (-1.0)
#define EPS 1e-5
#define met(a, b) memset (a, b, sizeof (a))
int dp
, val
, n;
int DaTaiyang (int x, int y)
{
if (dp[x][y] != -1) return dp[x][y];
if (x>n) dp[x][y] = val[x][y];
dp[x][y] = max (DaTaiyang (x+1, y), DaTaiyang (x+1, y+1)) + val[x][y];
return dp[x][y];
}
int main ()
{
while (scanf ("%d", &n) != EOF)
{
met (dp, -1);
for (int i=1; i<=n; i++)
for (int j=1; j<=i; j++)
scanf ("%d", &val[i][j]);
printf ("%d\n", DaTaiyang (0, 0));
}
return 0;
}
The Triangle
Description
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1)
Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right.
Input
Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100. The numbers in the triangle,
all integers, are between 0 and 99.
Output
Your program is to write to standard output. The highest sum is written as an integer.
Sample Input
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
Sample Output
30
记忆化搜索
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <limits>
#include <queue>
#include <stack>
#include <vector>
#include <map>
using namespace std;
typedef long long LL;
#define N 750
#define INF 0x3f3f3f3f
#define PI acos (-1.0)
#define EPS 1e-5
#define met(a, b) memset (a, b, sizeof (a))
int dp
, val
, n;
int DaTaiyang (int x, int y)
{
if (dp[x][y] != -1) return dp[x][y];
if (x>n) dp[x][y] = val[x][y];
dp[x][y] = max (DaTaiyang (x+1, y), DaTaiyang (x+1, y+1)) + val[x][y];
return dp[x][y];
}
int main ()
{
while (scanf ("%d", &n) != EOF)
{
met (dp, -1);
for (int i=1; i<=n; i++)
for (int j=1; j<=i; j++)
scanf ("%d", &val[i][j]);
printf ("%d\n", DaTaiyang (0, 0));
}
return 0;
}
相关文章推荐
- [编辑修订01]git 常用命令和Gerrit的联合使用常用命令
- discuzx安装插件时忘记安全密码解决办法
- sqlite3使用事务处理
- struts2学习
- Nmon命令行:Linux系统性能的监测利器
- 每天学点Python之Iterator
- 15级竞赛组周赛(3)题解(12.22.15)
- DOM操作
- 一种反转字符串的巧妙解法
- 【内核】linux内核启动流程详细分析【转】
- Discuz3.2与Java 项目整合单点登陆
- C#平衡树(AVLTree)
- 基于Android实现保存图片到本地并可以在相册中显示出来
- 编写自己的Exception
- 华为服务器RAID卡电池报错
- 整合阿里云OSS文件上传1
- bluedroid acl 发送和接受
- 每天学点Python之dict
- mysql 查询正则表达式
- 阿里 MYSQL 月报汇总