POJ 1163 The Triangle
来源:互联网 发布:袁腾飞知乎 编辑:程序博客网 时间:2024/06/05 19:36
The Triangle
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 39924 Accepted: 24043
Description
73 88 1 02 7 4 44 5 2 6 5(Figure 1)
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
573 88 1 0 2 7 4 44 5 2 6 5
Sample Output
30
Source
IOI 1994
题意就不多说了,数字三角形问题,基本动态规划。
f[ i ][ j ] 表示从位置(i,j)出发时的最大和,
则 f[i][j] += max(f[i + 1][j], f[i + 1][j + 1]);
代码1,递推计算:
#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int main(){ int f[110][110]; int t; scanf("%d", &t); for(int i = 1; i <= t; i++) { for(int j = 1; j <= i; j++) scanf("%d", &f[i][j]); } for(int i = t - 1; i >= 1; i--) { //往上走,从倒数第二层走到第一层 for(int j = 1; j <= i; j++) f[i][j] += max(f[i + 1][j], f[i + 1][j + 1]); //状态转移 } printf("%d\n", f[1][1]); return 0;}
下面采用递归计算,同时把结果保存在 f 数组里,避免重复计算
代码2,记忆化搜索:#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int f[110][110], a[110][110];int t;int d(int i, int j){ if(f[i][j] > 0) return f[i][j]; //若已经计算过,则一定是最优解,返回即可,记忆化 return f[i][j] = a[i][j] + (i == t ? 0 : max(d(i + 1, j), d(i + 1, j + 1)));//类似递推}int main(){ scanf("%d", &t); for(int i = 1; i <= t; i++) { for(int j = 1; j <= i; j++) scanf("%d", &a[i][j]); } memset(f, -1, sizeof(f)); //先初始化未计算 d(1, 1); //递归搜索 printf("%d\n", f[1][1]); return 0;}
0 0
- The Triangle--poj--1163
- POJ 1163 The Triangle
- poj 1163 The Triangle
- Poj 1163 The Triangle
- poj 1163 The Triangle
- poj 1163 The Triangle
- poj 1163 The Triangle
- POJ 1163 The Triangle
- poj 1163 The Triangle
- POJ 1163 The Triangle
- POJ 1163 The Triangle
- poj 1163 The Triangle
- poj-1163 The Triangle
- poj 1163 The Triangle
- POJ-1163-The Triangle
- poj 1163 The Triangle
- POJ-1163-The Triangle
- poj 1163 The Triangle
- 工程环境中设置预处理器定义
- PCAP 抓包
- PCAP 文件内容解析命令
- JSON详解
- 在Kali Linux下使用sqlmap
- POJ 1163 The Triangle
- LeetCode 104: Maximum Depth of Binary Tree
- php jquery的无刷新验证和提交
- [Spring Reference] P Ⅰ.Spring框架综述/1.Spring框架介绍/1.2 Spring框架模块
- 我面试遇到的C语言中单链表相关的操作粗浅实现
- 菜鸟学安卓Log.v(“第四篇”)——第一个安卓程序及DDMS视图和adb常用命令
- Android手机tcpdump抓包
- POJ1195 Mobile phones【树状数组】【二维】
- LeetCode 100: Same Tree