POJ1163
来源:互联网 发布:商标品牌起名软件 编辑:程序博客网 时间:2024/06/05 18:53
The Triangle
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 48800 Accepted: 29478
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
拿到这个题目,本能的反应——动态规划。思路也很清晰例如以下的这个三角阵7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
边界由于怎么走都只有一种选择,所以不用考虑两条边界。然后继续往下看,我的方法类似于打表,逐层逐个元素计算,懒得打出来了,直接上我的公式b[i][j]=a[i][j]+max(b[i-1][j-1],b[i-1][j])。然后在最后一行找出最大值输出即可(别用排序写=。=)。以下是我的代码
#include <stdio.h>#define M 105int a[M][M],b[M][M];int max(int m,int n){ return m>n?m:n;}int main(){ int n; //freopen("in.txt","r",stdin); scanf("%d",&n); for(int i=0; i<n; i++) for(int j=0; j<=i; j++) scanf("%d",&a[i][j]); b[0][0]=a[0][0]; for(int i=1; i<n; i++) { b[i][i]=b[i-1][i-1]+a[i][i]; b[i][0]=b[i-1][0]+a[i][0]; } for(int i=2; i<n; i++) for(int j=0; j<i; j++) b[i][j]=a[i][j]+max(b[i-1][j-1],b[i-1][j]); int sum=b[n-1][0]; for(int i=1; i<n; i++) sum=max(b[n-1][i],sum); printf("%d\n",sum); return 0;}
0 0
- POJ1163
- poj1163
- POJ1163
- POJ1163
- POJ1163
- poj1163
- poj1163
- POJ1163
- poj1163
- poj1163
- poj1163
- poj1163
- POJ1163
- Poj1163
- poj1163
- POJ1163
- poj1163
- poj1163
- ADO.NET 快速入门(二):执行命令
- Web前端入门
- linux下中文名乱码
- 第二本书unit5 lvm管理
- HDU1709 The Balance(母函数)
- POJ1163
- 2017.04.26 记雏鹰博客系统开工第2天。
- 查找表查找方式【严蔚敏】
- Linux实验常用命令
- c++文件的读取与写入
- ORACLE 实现加载配置到内存中,模仿java的hashmap功能
- 设计模式----Builder模式
- ADO.NET 快速入门(三):从存储过程获取输出参数
- 阿里实习生编程题2